const list = [{ id: 2, key: { id: 1, name: '测试' }, value: { id: 2, name: 'waer' } },{ id: 3, key: { id: 2, name: '电影' }, value: { id: 3, name: 'rt' } },{ id: 5, key: { id: 1, name: '测试' }, value: { id: 5, name: 'zxcf1' } },{ id: 9, key: { id: 6, name: 'wer' }, value: { id: 9, name: 'rt' } },{ id: 25, key: { id: 2, name: '电影' }, value: { id: 25, name: 'waerawer' } }]
将上面数组转换成树状结构数据
assemblyTreeData = (list) => {const target = [];const keys = {};list.forEach((item) => {if (item.key && item.key.id) {const values = {label: item.value.name,value: item.value.id};if (Object.prototype.hasOwnProperty.call(keys, item.key.id)) {target[keys[item.key.id]].children.push(values);} else {keys[item.key.id] = target.length;target.push({value: item.key.id,label: item.key.name,children: [values]});}}});return target;};
转换结果:
[{value: 1,label: '测试',children: [{label: 'waer',value: 2},{label: 'zxcf1',value: 5}]},{value: 2,label: '电影',children: [{label: 'rt',value: 3},{label: 'waerawer',value: 25}]},{value: 6,label: 'wer',children: [{label: 'rt',value: 9}]}]