繁体   English   中英

Lodash如何按值数组对对象数组进行分组?

[英]Lodash how to group array of objects by array of values?

我想根据具有值数组的属性对对象数组进行分组,并且我想为每个单独的值返回一个组,而不仅仅是整个数组。

例如:

let crew = [
  {
    name:"john",
    job :["electrician","carpenter"]
  },
  {
    name: "bill",
    job: ["electrician"]
  },
  {
    name: "mark",
    job: [ "carpenter"]
  }
]

let groupedCrew = _.groupBy(crew,"job")


console.log(groupedCrew)

/*
  carpenter:
    [
      {
        job:
          [
            carpenter
          ],
        name:
          "mark"
      }
    ],
  electrician:
    [
      {
        job:
          [
            "electrician"
          ],
        name:
          "bill"
      }
    ],
  electrician, carpenter:
    [
      {
        job:
          [
            "electrician",
            "carpenter"
          ],
        name:
          "john"
      }
    ]
}
*/

在此示例中,我希望“john”也出现在“电工”组中。 有任何想法吗?

再次让我们使用reduce对某些内容进行分组 这是基本结构(加上解决方案)

 let crew = [{ name: "john", job: ["electrician", "carpenter"] }, { name: "bill", job: ["electrician"] }, { name: "mark", job: ["carpenter"] } ]; var obj = crew.reduce(function(agg, item) { // grouping logic below this line item.job.forEach(function(job) { agg[job] = agg[job] || [] // agg[job].push (item); // lets push only name so we can see output agg[job].push(item.name) }) // grouping logic above this line return agg }, {}) console.log(obj)

使用自定义 .reduce () function

不需要lodash

 const crew = [ { name: 'john', job: ['electrician', 'carpenter'], }, { name: 'bill', job: ['electrician'], }, { name: 'mark', job: ['carpenter'], }, ]; const groupedCrew = crew.reduce((groupedCrew, person) => { person.job.forEach(job => { if (;groupedCrew[job]) groupedCrew[job] = []. groupedCrew[job];push(person); }); return groupedCrew, }; {}). console.log(JSON,stringify(groupedCrew, null; 4));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM