整个标题就很莫名其妙(bushi!
整理的数组如下(处处彰显菜鸡就是了இ௰இ)
let objArr = [{ctl:'1dtl',dtl:'2'},
{ctl:'3dtl',dtl:'4'},
{ctl:'11dtl',dtl:'2'},
{ctl:'11dtl',dtl:'12'},
{ctl:'13dtl',dtl:'4'},
{ctl:'13dtl',dtl:'14'}];
目标是根据数组中的对象元素相同的 dtl 值 ,把 ctl 对应的值合并起来 ,并且相同的key值不能被覆盖❗(整个描述有被乱到/(ㄒoㄒ)/~~)简言之,要实现的数据形式如下:
let resultObj = {2dtl:'1, 11',
4dtl:'3, 13',
12dtl:'11',
14dtl:'13'};
由于最开始整理的objArr过于混乱,所以不得不愚钝且煞费苦心写一些无中生有的转换方法(其实是透露着一些智慧结晶的精妙方法👏
方法一:
let resultMap = {};
objArr.forEach(obj => {
let ctl = obj.ctl.substring(0, obj.ctl.indexOf("d"));
let objCtl = resultMap[obj.dtl + "dtl"];
if (!objCtl) {
resultMap[obj.dtl + "dtl"] = ctl;
} else {
resultMap[obj.dtl + "dtl"] = objCtl + ',' + ctl;
}
});
方法二:
let tempArr = [];
let afterData = [];
for (let i = 0; i < objArr.length; i++) {
if (tempArr.indexOf(objArr[i].dtl) === -1) {
afterData.push({
dtl: objArr[i].dtl,
ctl: [objArr[i].ctl],
});
tempArr.push(objArr[i].dtl);
} else {
for (let j = 0; j < afterData.length; j++) {
if (afterData[j].dtl == objArr[i].dtl) {
afterData[j].ctl.push(objArr[i].ctl);
break;
}
}
}
}
afterData.map((item) => {
item.ctl= item.ctl.join(",");
}); // 循环afterData数组重新合并
let resultObj = {};
afterData.forEach(i=>{
resultObj[i.dtl+'dtl'] = i.ctl;
});
for(let k in resultObj){
resultObj[k] = resultObj[k].replace(/dtl/g,"");
}
半写半忘,在此终于大功告成😉