代码之家  ›  专栏  ›  技术社区  ›  Vladimir Humeniuk

按对象中的值将大数组排序为小数组

  •  -4
  • Vladimir Humeniuk  · 技术社区  · 6 年前

    let arr = [{
               'name': '1',
               'val': '12'
              },{
               'name': '4',
               'val': '52'
              },
              {
               'name': '11',
               'val': '15'
              },
              {
               'name': '4',
               'val': '33'
              },
              ...]
    

    我想找到所有相同的物体 name

    4 回复  |  直到 6 年前
        1
  •  1
  •   baao    6 年前

    您可以方便地按名称分组以获得所需的内容。下面是一个非常通用的函数,可以按指定的属性将对象数组分组到映射中。然后简单地把它变成一个数组,你就完成了

    function group(arr, propertyToGroupBy) {
      return arr.reduce(function(a, b) {
        return a.set(b[propertyToGroupBy], (a.get(b[propertyToGroupBy]) || []).concat(b));
      }, new Map);
    }
    
    const map = group(arr, 'name');
    
    console.log(Array.from(map));
    <script>
      let arr = [{
          'name': '1',
          'val': '12'
        }, {
          'name': '4',
          'val': '52'
        },
        {
          'name': '11',
          'val': '15'
        },
        {
          'name': '4',
          'val': '33'
        }
      ];
    </script>
        2
  •  0
  •   Hassan Imam Ravi kant    6 年前

    name Object.values()

    let arr = [{ 'name': '1', 'val': '12' },{ 'name': '4', 'val': '52' }, { 'name': '11', 'val': '15' }, { 'name': '4', 'val': '33' }],
        result = Object.values(arr.reduce((r,o) => {
          r[o.name] = r[o.name] || [];
          r[o.name].push(o);
          return r;
        },{}));
    console.log(result);
        3
  •  0
  •   Walter Chapilliquen - wZVanG    6 年前

    let arr=[{'name':'1','val':'12'},{'name':'4','val':'52'},{'name':'11','val':'15'},{'name':'4','val':'33'}];
    
    let groups = arr.reduce((obj, el) => ({...obj, [el.name]: [...obj[el.name] || [], el] }), {});
    
    console.log(groups);
        4
  •  0
  •   Leonid Pyrlia    6 年前

    reduce

    let arr = [{'name': '1','val': '12'},{'name': '4','val': '52'}, {'name': '11','val': '15'},{'name': '4','val': '33'}];
    
    // group object by same name
    const dataObj = arr.reduce((all, {name, val}) => {
    
        if (!all.hasOwnProperty(name)) all[name] = [];
        all[name].push({name, val});
        return all;
    
    }, {});
    
    // map out the result into an array
    const result = Object.keys(dataObj).map(k => (dataObj[k]));
    
    console.log(result);