在嵌套的javascript数组中对对象进行分组

时间:2017-09-16 00:04:48

标签: 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'}]
}];

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

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

我已经尝试了很多方法来实现上述结构,但无济于事。我尝试过使用reduce,但如果对象没有深度嵌套,则主要适用。我的问题是这些数组嵌套在对象中,而密钥嵌入在这些对象中。非常感谢您的帮助。

要求是不使用任何库,如下划线或lodash。我必须使用普通的JS。

2 个答案:

答案 0 :(得分:3)

由于您的数据结构,您可以使用多个let v1 = fromList[1..10] let v2 = fromList[2..11] let v = Data.Vector.zip v1 v2 循环并添加到新数组。



forEach




答案 1 :(得分:1)

你可以试试这个:

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)