代码之家  ›  专栏  ›  技术社区  ›  Abhi

如何通过分组ID创建数组的数组

  •  -1
  • Abhi  · 技术社区  · 7 年前

    let array = [{id: 1, name:'a'}, {id: 2, name: 'b'},{id: 1, name:'c'}];

    arr2 = [[{id: 1, name:'a'}, {id: 1, name:'c'}], [{id: 2, name: 'b'}]]

    我尝试了此操作,但找不到要添加到的数组:

     $scope.journalsArray = response.data.body.Data;
          $scope.newArray = [];
          let idsArray = [];
          for (let i = 0; i < $scope.journalsArray.length; i++) {
             if(idsArray.indexOf($scope.journalsArray[i].journal_id) != -1){
              $scope.newArray.push($scope.journalsArray[i]);
             }else{
               $scope.idsArray.push($scope.journalsArray[i].journal_id);
             }
          } 
    
    5 回复  |  直到 7 年前
        1
  •  1
  •   nicholaswmin    7 年前
    • Array.reduce 在原始阵列上。
    • 如果存在具有相同id的项的组,则推入该组。

    let array = [{id: 1, name:'a'}, {id: 2, name: 'b'},{id: 1, name:'c'}]
    let result = array.reduce((acc, item) => {
      const group = acc.find(group => group.find(inner => inner.id === item.id))
      
      if (group) 
       group.push(item)
      else
       acc.push([item])
       
      return acc
    }, [])
    
    console.log(result)
        2
  •  1
  •   Benni Russell    7 年前

    使用 reduce()、find()和filter()

    let array = [
        {id: 1, name:'a'},
        {id: 2, name: 'b'},
        {id: 1, name:'c'}
    ];
    
    const results = arr => {
        return arr.reduce((result, item ) => {
            if (!result.find(obj => obj[0].id === item.id)) {
                result.push(array.filter(val => val.id == item.id))   
            }
            return result;
        }, [])
    }
    console.log(results(array));
    
    // ​​​​​[ [ { id: 1, name: 'a' }, { id: 1, name: 'c' } ], [ { id: 2, name: 'b' } ] ]​​
    
        3
  •  0
  •   Nina Scholz    7 年前

    Map 并收集同一组中的对象。然后得到每组的值作为结果。

    var array = [{ id: 1, name:'a' }, { id: 2, name: 'b' },{ id: 1, name:'c' }],
        result = Array.from(
            array
                .reduce((m, o) => m.set(o.id, [...(m.get(o.id) || []), o]), new Map)
                .values()
        );
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        4
  •  0
  •   kockburn    7 年前

    使用Array#reduce、Map、destructuring和Array#concat。

    const data = [{id: 1, name:'a'}, {id: 2, name: 'b'},{id: 1, name:'c'}];
    
    const res = data.reduce((a,{id,name})=>{
      return a.set(id, [{id,name}].concat(a.get(id)||[]));
    }, new Map()).values();
    
    console.log([...res]);
        5
  •  0
  •   Kishore    7 年前

    let array = [{id: 1, name:'a'}, {id: 2, name: 'b'},{id: 1, name:'c'}]
    let result = array.reduce((acc, item) => {
      const group = acc.find(group => group.find(inner => inner.id === item.id))
      
      if (group) 
       group.push(item)
      else
       acc.push([item])
       
      return acc
    }, [])
    
    console.log(result)

    让数组=[{id:1,名称:'a'},{id:2,名称:'b'},{id:1,名称:'c'}]
    
    国际单项体育联合会(小组)
    分组推送(项目)
    附件推送([项目])
    
    返回acc
    
    console.log(结果)