如何将对象数组展平为每个对象参数的数组?
How to flatten an array of objects into arrays for each object parameter?
我有一个这样的对象数组:
[
{
p1: 1
p2: 2
},
{
p1: 3
p2: 4
}
]
我想为对象上的每个 属性 将其展平为一个数组(保持顺序):
[1, 3] and [2, 4]
最好将这些存储在以 属性 作为键的字典中:
{
p1: [1, 3],
p2: [2, 4]
}
在 javascript 中是否有非暴力方法可以做到这一点?如果这些库在这里有任何帮助,我已经在使用 jQuery 和 Underscore.js。
我目前的计划是遍历数组中的所有对象并手动将每个 属性 值添加到其对应的数组中。我很想知道是否有更有趣的方法。
类似的东西:
var result = data.reduce(function(acc, x) {
Object.keys(x).forEach(function(k) {
acc[k] = (acc[k] || []).concat([x[k]])
})
return acc
},{})
console.log(result)
//^ {
// p1: [1, 3],
// p2: [2, 4]
// }
但请注意,对象键没有顺序,结果取决于每个实现。如果您需要特定的顺序,您可能需要对结果数组进行排序。
如果每个对象的属性可靠地相同,您可以像这样使用下划线。
var keys = _.keys(arr[0]);
var newObj = _.reduce(keys,function(obj,key){
obj[key] = _.pluck(arr,key)
},{});
//newObj will now be in the requested format
如果不同对象的属性不同,您需要执行一些额外的逻辑来获取要迭代的完整属性列表。
我有一个这样的对象数组:
[
{
p1: 1
p2: 2
},
{
p1: 3
p2: 4
}
]
我想为对象上的每个 属性 将其展平为一个数组(保持顺序):
[1, 3] and [2, 4]
最好将这些存储在以 属性 作为键的字典中:
{
p1: [1, 3],
p2: [2, 4]
}
在 javascript 中是否有非暴力方法可以做到这一点?如果这些库在这里有任何帮助,我已经在使用 jQuery 和 Underscore.js。
我目前的计划是遍历数组中的所有对象并手动将每个 属性 值添加到其对应的数组中。我很想知道是否有更有趣的方法。
类似的东西:
var result = data.reduce(function(acc, x) {
Object.keys(x).forEach(function(k) {
acc[k] = (acc[k] || []).concat([x[k]])
})
return acc
},{})
console.log(result)
//^ {
// p1: [1, 3],
// p2: [2, 4]
// }
但请注意,对象键没有顺序,结果取决于每个实现。如果您需要特定的顺序,您可能需要对结果数组进行排序。
如果每个对象的属性可靠地相同,您可以像这样使用下划线。
var keys = _.keys(arr[0]);
var newObj = _.reduce(keys,function(obj,key){
obj[key] = _.pluck(arr,key)
},{});
//newObj will now be in the requested format
如果不同对象的属性不同,您需要执行一些额外的逻辑来获取要迭代的完整属性列表。