setPropPath【给每个对象设置路径节点名】
描述
设置对象,给每个对象设置路径节点名(递归)
比如一个对象是:
const user = { name: '张洪文', id: '1', list: [], obj: { id: '---', hos: { location: { name: '卫生院' } } }
转化得
{ "name": "张洪文", "id": "1", "list": [], "obj": { "id": "---", "hos": { "location": { "name": "卫生院", "__path__": "obj|hos|location" }, "__path__": "obj|hos" }, "__path__": "obj" }, "__path__": "" }
# 1.示例
import { setPropPath } from 'sf-utils2'
const user = {
name: '张洪文',
id: '1',
list: [],
obj: {
id: '---',
hos: {
location: {
name: '卫生院'
}
}
}
}
setPropPath({ data: user })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输出结果,点击查看
;({
name: '张洪文',
id: '1',
list: [],
obj: {
id: '---',
hos: {
location: {
name: '卫生院',
__path__: 'obj|hos|location' // 路径名
},
__path__: 'obj|hos' // 路径名
},
__path__: 'obj' // 路径名
},
__path__: '' // 路径名
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2.入参说明
# 主入参
| 参数 | 说明 | 类型 | 是否必填 | 默认值 |
|---|---|---|---|---|
| data | 原数据 | Object | 是 | |
| field | 设置路径名,默认不需要传入 | String | 否 | __path__ |
# 3.源码
import deepClone from './deepClone'
import isPlainObject from '@/base/isPlainObject'
import def from './def'
/**
* 设置对象给每个对象设置路径名
* @param data 对象
* @param field
* @returns {*}
* example:
* {
* name: '张洪文',
* id: '1',
* list: [],
* obj: {
* id: '---',
* hos: {
* location: {
* name: '卫生院'
* }
* }
* }
* }
*
* =>
{
* name: '张洪文',
* id: '1',
* list: [],
* _path: '',
* obj: {
* id: '---',
* _path: 'obj',
* hos: {
* location: {
* name: '卫生院',
* _path: 'obj|hos|location'
* },
* _path: 'obj|hos'
* }
* }
* }
*/
function setPropPath({ data = {}, field = '__path__' }) {
const dataCopy = deepClone(data)
const cb = (data = dataCopy, parentFieldValue = field, fieldValue = '') => {
if (isPlainObject(data)) {
def(data, field, undefined)
data[field] = [parentFieldValue, fieldValue].filter(v => v).join('.')
if (data[field] == field) data[field] = ''
Object.keys(data).forEach(key => {
cb(data[key], data[field], key)
})
}
return data
}
return cb()
}
export default setPropPath
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
上次更新: 2023/06/24, 19:35:48