sf-utils2 sf-utils2
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
版本v3.3.3-beta1
首页
  • 01.快速开始 🔥
  • 02.基础-Base
  • 03.对象-Object
  • 04.数组-Array
  • 05.方法-Function
  • 06.字符串-String
  • 07.数学-Math
  • 08.dom
  • 09.拓展
  • webpack5.x教程学习 (opens new window)
  • 例子
  • 教程 🔥
  • 例子配置
企业级后台模版 (opens new window)
  • 快速开始

  • 基础-Base

  • 对象-Object

    • 序言 👏
    • has【对象含有属性(功能更强大)】
    • hasOwn【对象含有属性(扩展)】
    • deepClone【深度克隆】
    • setPropPath【给每个对象设置路径节点名】
    • findPropPath【从对象中找到键名路径名】
      • 1.示例
      • 2.入参说明
        • 主入参
        • props 对象
      • 3.源码
    • get【获取对象属性值】🔥🔥🔥
    • flatten 【将对象进行扁平化】
    • readonly【定义只读属性】
    • def【定义不可枚举属性】
    • cache【内存缓存对象】
    • bus【发布订阅】🔥🔥🔥
    • merge 【合并对象】
    • deepMerge 【递归深合并对象】
    • transformObjectKeys【对象属性字段全部转成大写或者小写】
    • convertPropToLower【对象属性字段全部转成大写或者小写】
    • looseEqual【比较对象内部结构和数据】🔥🔥🔥
    • omit【忽略对象属性】
    • pick【取出对象属性】
  • 数组-Array✨✨✨

  • 方法-Function

  • 字符串-String

  • 数学-Math

  • 文件-Buffer

  • 节点-dom

  • 拓展

  • nodejs

目录

findPropPath【从对象中找到键名路径名】

描述

从对象中依次递归遍历出所有符合(属性)key === findField,键名路径名
比如一个对象是:
const user = { name: '张洪文', id: '1', list: [], obj: { id: '---', hos: { location: { name: '卫生院' } } }

要求获取到 其中的所有属性名为 name 访问过的路径,依次从顶部到当前, 得到
[ { "_pathList": [ "张洪文", "name" ], "_path": "张洪文|name", "_value": "张洪文" }, { "_pathList": [ "卫生院", "name" ], "_path": "卫生院|name", "_value": "卫生院" } ]

# 1.示例

import { findPropPath } from 'sf-utils2'

const user = {
  name: '张洪文',
  id: '1',
  list: [],
  obj: {
    id: '---',
    hos: {
      location: {
        name: '卫生院'
      }
    }
  }
}
findPropPath({ data: user, findField: 'name' })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输出结果,点击查看
;[
  {
    _pathList: ['张洪文', 'name'], // 路径名 数组
    _path: '张洪文|name', // 路径名
    _value: '张洪文' // 找到属性对应的值
  },
  {
    _pathList: ['卫生院', 'name'],
    _path: '卫生院|name',
    _value: '卫生院'
  }
]
1
2
3
4
5
6
7
8
9
10
11
12

# 2.入参说明

# 主入参

参数 说明 类型 是否必填 默认值
data 原数据 Object 是
findField 要寻找的属性名 String 是 name
props 自定义属性名,详情见下 👇 Object 否

# props 对象

参数 说明 类型 是否必填 默认值
key 从上而下的路径键名,用于返回 String 否 _path
value 找到属性名的对应的属性值,用于返回 String 否 _value

# 3.源码

import setPropPath from './setPropPath'
import isPlainObject from '@/base/isPlainObject'

/**
 * 根据findField 从对象中依次遍历出所有符合(属性)key === findField,路径
 * @param {object} data 对象
 * @param {string} findField 要查找的属性名
 * @param {object} props 自定义属性名
 * @returns {*[]}
 */
function findPropPath({ data = {}, findField = 'name', props = { key: '__path__', value: '__value__' } }) {
  const _data = setPropPath({ data, field: props.key })
  const cb = (data = _data, selfField = findField, result = []) => {
    if (isPlainObject(data)) {
      if (data.hasOwnProperty(selfField)) {
        const value = {
          [props.key]: (data[selfField] && data[selfField][props.key]) || '',
          [props.value]: data[selfField]
        }
        if (!isPlainObject(data[selfField])) {
          value[props.key] = data[selfField] + '|' + selfField
        }
        result.push(value)
      }
      Object.keys(data).forEach(key => {
        cb(data[key], selfField, result)
      })
    }
    return result || []
  }
  return cb()?.map(v => ({
    __pathList__: v[props.key].split('|'),
    ...v
  }))
}

export default findPropPath
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
上次更新: 2023/06/24, 19:35:48
setPropPath【给每个对象设置路径节点名】
get【获取对象属性值】🔥🔥🔥

← setPropPath【给每个对象设置路径节点名】 get【获取对象属性值】🔥🔥🔥→

Theme by Vdoing | Copyright © 2022-2025 bianpengfei
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×