form表单多维数组传值
原数据
let obj = {
'a.b.c':111,
// 'c':2,
'a.b.d':3,
'date.name':'ceso'
}
1
2
3
4
5
6
2
3
4
5
6
目标数据
{ a: { b: { c: 111, d: 3 } },
date: { name: 'ceso' } }
1
2
2
案例
let obj = {
'a.b.c':111,
// 'c':2,
'a.b.d':3,
'date.name':'ceso'
}
var deepExtend = require('deep-extend');//这个是写好的插件
deepExtend1//是本人简化版本的 不是特别严谨但是能用
let arrvalue =[]
let arrkey =[]
for (const key in obj) {
if (Object.hasOwnProperty.call(obj, key)) {
const element = obj[key];
arrkey.push(key.split('.'))
arrvalue.push(element)
}
}
let newObjArr =[]
for (let index = 0; index < arrkey.length; index++) {
let element = arrkey[index];
// console.log('element :>> ', element);
let arrsss =element.reverse().reduce((obj,currentValue,c,Arr)=>{
let objNew ={}
if(c==0){
obj[currentValue] =arrvalue[index]
objNew = obj
}else{
let objs= {}
objs[currentValue] = obj
objNew = objs
}
return objNew
},{})
newObjArr.push(arrsss)
}
let arr = newObjArr.reduce((obj,currentValue,c,Arr)=>{
if(c==0){
obj = currentValue
return obj
}
return deepExtend1(obj,currentValue)
},{})
function deepExtend1(obj1,obj2) {
let target = obj1
Object.keys(obj2)
.forEach(key=>{
if(typeof target[key]=='object'){
deepExtend1(target[key],obj2[key])
return
}else if(!target[key]){
target[key]=obj2[key]
}
else {
deepExtend1({},obj2[key])
return
}
})
return target
}
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
61
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
61