簡體   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