javascript - JSON 数组根据相同的 ID 组合项目

标签 javascript

所以我有这些项目,它有一些重复的 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/

相关文章:

javascript - 嵌套数组操作奇怪的行为,js

javascript - 加载更多按钮脚本: image instead of text

javascript - $.ajax 缓存真实持续时间

javascript - $scope 项目的 karma 测试不工作/项目未由 $compile 触发

javascript - jQuery cookie CORS 即使设置了 header 和 withCredentials 也不起作用

javascript - jQuery Soundboard-播放一个按钮会关闭所有其他按钮

php - 用户的计算机名称以及 IP 地址

javascript - 让我自己的过滤器不起作用

javascript - 在不使用扩展运算符的情况下正确更新 React.js 状态中的对象

javascript - 如何使用chart.js在条形图中绘制多个颜色条