[英]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.