数组对象根据某个字段重新分组

845 阅读1分钟

分组结果分数组

  let map = {},
    dest = [];
    for(let i = 0; i < arr.length; i++){
        let ai = arr[i];
        if(!map[ai.id]){
            dest.push({
                id: ai.id,
                name: ai.name,
                data: [ai]
            });
            map[ai.id] = ai;
        }else{
            for(let j = 0; j < dest.length; j++){
                let dj = dest[j];
                if(dj.id == ai.id){
                    dj.data.push(ai);
                    break;
                }
            }
        }
    }

分组结果为对象

    fn(arr: any[]) {
    let checkArr = []
    let imgObj = {}
    if (arr && arr.length) {
      for (let i = 0; i < arr.length; i++) {
        let a = arr[i]
        if (checkArr.indexOf(a.color) == -1) {
          checkArr.push(a.color)
        }
      }
      checkArr.forEach((item, index) => {
        arr.forEach((item1, index1) => {
          if (item === arr[index1].color) {
            if (imgObj[item]) {
              imgObj[item].push(arr[index1])
            } else {
              imgObj[item] = [arr[index1]]
            }
          }
        })
      })
    }
    console.log(checkArr, imgObj)
    return imgObj
  }

另一种方法,群里大佬提供的

const map = {}
arr.forEach(v => {
   if(map[v.title]){
      map[v.title] = [map[v.title]]
      map[v.title].push(v.name)
   }else {
      map[v.title] = v.name 
   }
})