gpt4 book ai didi

javascript - JavaScript 中的嵌套数组属性分组

转载 作者:行者123 更新时间:2023-11-28 13:16:12 25 4
gpt4 key购买 nike

我的 Web 应用程序中有一个如下所示的 json 对象。它是一个产品对象数组,每个产品对象都有一个类别属性,其中包含该产品所属的类别数组。

var products = [  
{
"id":1,
"name":"Product 1",
"price":10,
"category":[
{
"id":10,
"name":"Category 1"
},
{
"id":20,
"name":"Category 2"
}
]
},
{
"id":2,
"name":"Product 2",
"price":20,
"category":[
{
"id":20,
"name":"Category 2"
},
{
"id":30,
"name":"Category 3"
}
]
}
]

所以现在我想按类别分组显示它们,因此最终结果如下所示。我已经在我的项目中使用了 Underscore.js,所以如果我能用它来实现这一点那就太好了。

var categories = [  
{
"id":10,
"name":"Category 1",
"products":[
{
"id":1,
"name":"Product 1",
"price":10
}
]
},
{
"id":20,
"name":"Category 2",
"products":[
{
"id":1,
"name":"Product 1",
"price":10
},
{
"id":2,
"name":"Product 2",
"price":20,
}
]
},
{
"id":30,
"name":"Category 3",
"products":[
{
"id":2,
"name":"Product 2",
"price":20,
}
]
}
]

最佳答案

我不完全确定是否有一个开箱即用的解决方案来解决这个带有下划线的问题,但是手动解决这个问题也不应该太难:

var categoriesIndexed = {};
var categories = [];

products.forEach(function(product) {
product.category.forEach(function(category) {
// create a new category if it does not exist yet
if(!categoriesIndexed[category.id]) {
categoriesIndexed[category.id] = {
id: category.id,
name: category.name,
products: []
};
categories.push(categoriesIndexed[category.id]);
}

// add the product to the category
categoriesIndexed[category.id].products.push({
id: product.id,
name: product.name,
price: product.price
});
});
});

关于javascript - JavaScript 中的嵌套数组属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com