1. 程式人生 > 其它 >前端 常用演算法

前端 常用演算法

技術標籤: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)