const list = [
{ fileName: "1.png", nodeId: "bidding-project-apply" ,name:null},
{ fileName: "2.png", nodeId: "bidding-project-apply" ,name:null},
{ fileName: "3.png", nodeId: "bidding-it-risk" ,name:null},
{ fileName: "2.png", nodeId: "bidding-it-risk" ,name:null},
{ fileName: "4.png", nodeId: "bidding-reported-material" ,name:null},
{ fileName: "5.png", nodeId: "bidding-bid-opening-evaluation" ,name:'附件1'},
{ fileName: "6.png", nodeId: "bidding-bid-opening-evaluation",name:'附件2' },
{ fileName: "7.png", nodeId: "bidding-bid-opening-evaluation" ,name:'附件3'}
]
原数组改成下面的对象
obj = {
'bidding-bid-opening-evaluation': {
'附件1': [
{ fileName: "5.png", nodeId: "bidding-bid-opening-evaluation", name: '附件1' }
],
'附件2': [
{ fileName: "6.png", nodeId: "bidding-bid-opening-evaluation", name: '附件2' },
],
'附件3': [
{ fileName: "7.png", nodeId: "bidding-bid-opening-evaluation", name: '附件3' }
]
},
'bidding-it-risk': {
'fileList': [
{ fileName: "3.png", nodeId: "bidding-it-risk", name: null },
{ fileName: "2.png", nodeId: "bidding-it-risk", name: null }
]
},
'bidding-project-apply': {
'fileList': [
{ fileName: "1.png", nodeId: "bidding-project-apply", name: null },
{ fileName: "2.png", nodeId: "bidding-project-apply", name: null }
]
},
'bidding-reported-material': {
'fileList': [
{ fileName: "4.png", nodeId: "bidding-reported-material", name: null }
]
}
}
这种怎么改造好?
一次遍历就解决了
let res = list.reduce((o, item) => {
let parent = o[item.nodeId] || (o[item.nodeId] = {})
let key = item.name || 'fileList'
let arr = parent[key] || (parent[key] = [])
arr.push(item)
return o
}, {})
规则是 nodeId 相同的加入到一个对象里 并且 name 有值 话还得 把不同name提取出来 放到一个数组 。name 为 key值 数组为value。name为null 直接放到 fileList?