前端 常用演算法
阿新 • • 發佈:2021-01-11
技術標籤:javascriptes6
前端 常用演算法
陣列物件根據某個 欄位key值 進行分組
資料:
var data = [ { "devid":100001, "devname":"JZ_1079_博愛農信社視訊會議(客)", "parotid":100001, "portfullname":"JZ_1079_博愛農信社視訊會議(客)/1架/1框/3槽/SFP盤/1埠" }, { "devid":100004, "devname":"JZ_35_豐收路", "parotid":100004, "portfullname":"JZ_35_豐收路/1架/1框/6槽/N1SLQ16盤/3埠" }, { "devid":100004, "devname":"JZ_35_豐收路", "parotid":100005, "portfullname":"JZ_35_豐收路/1架/1框/13槽/N1SLQ16盤/3埠" }, { "devid":100004, "devname":"JZ_35_豐收路", "parotid":100006, "portfullname":"JZ_35_豐收路/1架/1框/29槽/N2SLO1盤/2埠" }, { "devid":100005, "devname":"JZ_45_西萬", "parotid":100007, "portfullname":"JZ_45_西萬/1架/1框/5槽/S16盤/1埠" }, { "devid":100005, "devname":"JZ_45_西萬", "parotid":100008, "portfullname":"JZ_45_西萬/1架/1框/6槽/S16盤/1埠" } ]
演算法:
const newArray = []; data.map(item=>{ return [item] }).forEach(([{...item}])=>{ const flag = newArray.find(([{...o}])=>o.devid === item.devid); if(!flag) { newArray.push([{...item}]) } else { newArray.forEach(([{...y}], index)=>{ if(y.devid === item.devid) { newArray[index].push(item) } }) } })
計算結果:
陣列物件根據某個 欄位key值 去重(資料如上)
演算法
let newobj = {};
let arr = data.reduce((preVal, curVal) => {
newobj[curVal.devid] ? '' : (newobj[curVal.devid] = preVal.push(curVal));
return preVal;
}, []);
console.log(arr)