javascript - 对嵌套 javascript 数组内的对象进行分组

标签 javascript angularjs arrays reactjs object

我有以下数组,其中有一个包含嵌套数组的对象,而嵌套数组又拥有自己的对象:

var list = [{
    one: [{key: 1, value: 'eng1'}, {key: 2, value: 'eng2'}],
    two: [{key: 1, value: 'esp1'}, {key: 2, value: 'esp2'}]
}];

我想通过嵌套数组的对象内的键属性对上面的数据进行分组。以下是所需的结构:

var grouped = [
    {
        key: 1,
        group: {
            one: {
                value: 'eng1'
            },
            two: {
                value: 'esp1'
            }
        }
    },
    {
        key: 2,
        group: {
            one: {
                value: 'eng2'
            },
            two: {
                value: 'esp2'
            }
        }
    }
]

我尝试了很多方法来实现上述结构但没有成功。我尝试过使用reduce,但这主要适用于对象嵌套不深的情况。我的问题是数组嵌套在对象内部并且 key 嵌入在这些对象中。我们将非常感谢您的帮助。

要求是不要使用任何库,例如 underscore 或 lodash。我必须使用纯 JS 来实现它。

最佳答案

根据您的数据结构,您可以使用多个 forEach 循环并添加到新数组中。

var list = [{
    one: [{key: 1, value: 'eng1'}, {key: 2, value: 'eng2'}],
    two: [{key: 1, value: 'esp1'}, {key: 2, value: 'esp2'}]
}];

var grouped = [];
list.forEach(function(e) {
  Object.keys(e).forEach(function(k) {
    var that = this;
    e[k].forEach(function(a) {
      if(!that[a.key]) grouped.push(that[a.key] = {key: a.key, group: {}})
      Object.assign(that[a.key].group, {[k]: {value: a.value}})
    })
  }, {})
})

console.log(grouped)

关于javascript - 对嵌套 javascript 数组内的对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248832/

相关文章:

python - 如何用 3 个数组制作 2D 彩色网格

Javascript 代码在控制台中有效,但在 HTML 中无效(点击功能)

javascript - Chrome 开发者工具中是否有 "pause animation"功能的键盘快捷键? (F12)

javascript - 在for循环中跳出if语句的正确方法

javascript - AngularJS $stateparams

javascript - 如何使用 ng-repeat 指令解决性能问题?

javascript - 'Access-Control-Allow-Origin' header 如何工作?

javascript - javascript错误中的匿名函数

Perl:if(列表中的元素)

结构中的 C++ 可变长度数组