所以我有这些项目,它有一些重复的 ID,但值不同。它可能是更多的项目,但目前我使用这些项目作为例子。数组结果是这样的:
"items": [
{
"id": "E46",
"size": "5 Ounce"
},
{
"id": "E46",
"color": "Green"
},
{
"id": "E32",
"size": "8 Ounce"
},
{
"id": "E32",
"color": "Green"
},
{
"id": "E4G",
"size": "5 Ounce"
},
{
"id": "E4G",
"color": "Pink"
},
{
"id": "E3C",
"size": "8 Ounce"
},
{
"id": "E3C",
"color": "Pink"
}
]
我想把这些结合起来,让它看起来像这样:
"items": [
{
"id": "E46",
"size": "5 Ounce"
"color": "Green"
},
{
"id": "E32",
"size": "8 Ounce"
"color": "Green"
},
{
"id": "E4G",
"size": "5 Ounce"
"color": "Pink"
},
{
"id": "E3C",
"size": "8 Ounce"
"color": "Pink"
}
]
如果可以,谢谢:
最佳答案
你可以这样做:
var data = { items:
[{ id: 'E46', size: '5 Ounce' },
{ id: 'E46', color: 'Green' },
{ id: 'E32', size: '8 Ounce' },
{ id: 'E32', color: 'Green' },
{ id: 'E4G', size: '5 Ounce' },
{ id: 'E4G', color: 'Pink' },
{ id: 'E3C', size: '8 Ounce' },
{ id: 'E3C', color: 'Pink' } ] }
var result = {}
data.items.forEach(function (item) { //1
Object.keys(item).forEach(function(key) { //2
if (!result[item.id]) result[item.id] = {}; //3
result[item.id][key] = item[key]; //4
});
})
这是正在发生的事情:
//1 我们遍历items
数组中的每一项
//2 我们循环遍历 items
数组中单个 item
中的每个 key
//3 我们使用 item
id 和一个空对象创建键值对
//4 我们将当前键值对添加到我们的新 item
对象中,使其内部成为我们的结果
对象。
result
对象将具有以下值:
{ E46: { id: 'E46', size: '5 Ounce', color: 'Green' },
E32: { id: 'E32', size: '8 Ounce', color: 'Green' },
E4G: { id: 'E4G', size: '5 Ounce', color: 'Pink' },
E3C: { id: 'E3C', size: '8 Ounce', color: 'Pink' } }
如果您想将其放回数组中,您只需遍历对象中的每个键值对并将所有值添加到数组中,如下所示:
var arrayResult = []
Object.keys(result).forEach(function(key) {
arrayResult.push(result[key])
});
然后您的 arrayResult
变量将具有以下值:
[ { id: 'E46', size: '5 Ounce', color: 'Green' },
{ id: 'E32', size: '8 Ounce', color: 'Green' },
{ id: 'E4G', size: '5 Ounce', color: 'Pink' },
{ id: 'E3C', size: '8 Ounce', color: 'Pink' } ]
您可以在程序的其他任何地方使用它。
关于javascript - JSON 数组根据相同的 ID 组合项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43859745/