我有以下数组,其中有一个包含嵌套数组的对象,而嵌套数组又拥有自己的对象:
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/