1.对象判断
let newAarray = [];
if (info.checkedNodes && info.checkedNodes.length > 0) {
let idArray = [];
info.checkedNodes.forEach(function (ele, i) {
if (
idArray.indexOf(info.checkedNodes[i].systemId) === -1 &&
info.checkedNodes[i].systemId
) {
newAarray.push({
id: info.checkedNodes[i].systemId,
menuList: [info.checkedNodes[i].key],
});
idArray.push(info.checkedNodes[i].systemId);
} else {
newAarray.forEach(function (dom, k) {
if (newAarray[k].id == info.checkedNodes[i].systemId) {
newAarray[k].menuList.push(info.checkedNodes[i].key); //把具有相同systemId的key值进行合并
}
});
}
});
console.log(newAarray, '2222222');
}
2、reduce
不足:有个bug,通过合并同类属性重组,它会给最后的数组添加空属性,然后也没找到是哪里来的,但是可以把最后的数组通过filter拿到有值的数据这种方法去除空属性。
//方法
const Group = (arr = [], key) => {
return key
? arr.reduce((t, v) => {
if (!t[v[key]]) {
t[v[key]] = {
id: v[key],
menuList: [],
};
}
t[v[key]].menuList.push(v.key);
return t;
}, [])
: [];
};
//使用
let resdata = Group(
info.checkedNodes.filter((item) => item.systemId),
'systemId',
).filter((item) => item);