[英]Group Javascript object based on Array Object list
我正在嘗試找到一種方法來根據組array
轉換此對象列表。 我發現棘手的部分是遍歷組數組並將 object 應用於多個位置(如果有多個組)。
我還試圖忽略任何不屬於任何事物的群體。 我試過使用reduce
function 但我無法通過組數組進行迭代。
let cars =
[
{
"group":[],
"name": "All Makes",
"code": ""
},
{
"group":["Group A"],
"name": "BMW",
"code": "X821"
},
{
"group":["Group B"],
"name": "Audi",
"code": "B216"
},
{
"group":["Group B"],
"name": "Ford",
"code": "P385"
},
{
"group":["Group B", "Group C"],
"name": "Mercedes",
"code": "H801"
},
{
"group":["Group C"],
"name": "Honda",
"code": "C213"
}
]
變成這樣:
let cars = {
"Group A": [
{
name: "BMW",
code: "X821",
}
],
"Group B": [
{
name: "Audi",
code: "B216"
},
{
name: "Ford",
code: "P385"
},
{
name: "Mercedes",
code: "H801"
}
],
"Group C":[
{
name: "Mercedes",
code: "H801"
},
{
name:"Honda",
code: "C213"
}
]
};
我已經嘗試使用 reduce 來完成此操作,但如果它在多個組中,則分組不會復制。
let result = cars.reduce(function(x, {group, name}){
return Object.assign(x, {[group]:(x[group] || [] ).concat({group, name})})
}, {});
任何有助於解決此問題的指示將不勝感激。
您可以使用.reduce()
遍歷 cars 中的每輛cars
object。 對於給定汽車的每個group
數組,您可以使用.forEach()
然后將該組作為鍵添加到累加器。 如果累加器中已經設置了分組,則可以抓取分組的對象數組,否則,可以創建一個新數組[]
。 一旦你有了一個數組,你就可以使用.concat()
將 object 添加到數組中。 由於我們在group
數組上使用.forEach()
,如果它為空,它不會將 object 添加到累積的 object 中,因為.forEach()
不會迭代空數組。
請參見下面的示例:
const cars = [{ "group":[], "name": "All Makes", "code": "" }, { "group":["Group A"], "name": "BMW", "code": "X821" }, { "group":["Group B"], "name": "Audi", "code": "B216" }, { "group":["Group B"], "name": "Ford", "code": "P385" }, { "group":["Group B", "Group C"], "name": "Mercedes", "code": "H801" }, { "group":["Group C"], "name": "Honda", "code": "C213" } ]; const res = cars.reduce((acc, {group, ...r}) => { group.forEach(key => { acc[key] = (acc[key] || []).concat({...r}); // copy r so it is a different reference for each grouped array }); return acc; }, {}); console.log(res);
一些基本的方法。 @Nick 的好多了。
let cars = [{ "group": [], "name": "All Makes", "code": "" }, { "group": ["Group A"], "name": "BMW", "code": "X821" }, { "group": ["Group B"], "name": "Audi", "code": "B216" }, { "group": ["Group B"], "name": "Ford", "code": "P385" }, { "group": ["Group B", "Group C"], "name": "Mercedes", "code": "H801" }, { "group": ["Group C"], "name": "Honda", "code": "C213" } ] let newCars = {}; cars.forEach(o => { o.group.forEach(g => { if (;newCars[g]) newCars[g] = []. newCars[g]:push({ name. o,name: code. o;code }); }); }). console;log(newCars);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.