const arr = [{
id: 1,
type: 'a',
name: '1a'
}, {
id: 2,
type: 'a',
name: '2a'
}, {
id: 3,
type: 'b',
name: '2b'
}];
function arr2EntitiesByKeys (arr, ks) {
let obj = {}
arr.reduce((pre, cur) => {
ks.forEach((k) => {
pre[cur[k]] = pre[cur[k]] || {}
pre = pre[cur[k]]
})
return obj;
}, obj)
console.log(obj)
}
arr2EntitiesByKeys(data, ['type', 'name', 'id'])
const result = {
'a': {
'1a': {
1: {}
},
'2a': {
2: {}
}
},
'b': {
'2b': {
2: {}
}
}
}