我有一个对象数组,如下所示:
[
{
key1: val_1.a
key2: val_2.a
key3: val_3.a
},{
key1: val_1.b
key2: val_2.b
key3: val_3.b
},{
key1: val_1.c
key2: val_2.c
key3: val_3.c
}
]
我想使用该对象创建另一个看起来像这样的对象:
{
key1: [val_1.a, val_1.b, val_1.c]
key2: [val_2.a, val_2.b, val_2.c]
key3: [[val_3.a, val_3.b, val_3.c]
}
由于每个对象中的键都相同,我只想在数组中保存与每个键对应的所有值。
请,如果有人之前必须这样做并且可以分享代码那就太好了。提前谢谢。
答案 0 :(得分:5)
你可以这样做,这种方式可以在所有浏览器中使用,甚至可以在所有对象都没有完全相同的键集的情况下工作(例如,它只会累积存在的任何键的数据):
function combineKeyData(data) {
var output = {}, item;
// iterate the outer array to look at each item in that array
for (var i = 0; i < data.length; i++) {
item = data[i];
// iterate each key on the object
for (var prop in item) {
if (item.hasOwnProperty(prop)) {
// if this keys doesn't exist in the output object, add it
if (!(prop in output)) {
output[prop] = [];
}
// add data onto the end of the key's array
output[prop].push(item[prop]);
}
}
}
return output;
}
工作jsFiddle:http://jsfiddle.net/jfriend00/0jjquju9/
说明:
答案 1 :(得分:0)
result = {};
for (var i = 0; i < array.length; i++) {
var obj = array[i];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (result[key]) {
result[key].push(obj[key]);
} else {
retult[key] = [obj[key]];
}
}
}
}
答案 2 :(得分:0)
var arr = [
{
key1: 'val_1.a',
key2: 'val_2.a',
key3: 'val_3.a'
},{
key1: 'val_1.b',
key2: 'val_2.b',
key3: 'val_3.b'
},{
key1: 'val_1.c',
key2: 'val_2.c',
key3: 'val_3.c'
}
]
var result = arr.reduce(function(obj, current) { //Reduce the array to an object
Object.keys(current).forEach(function(key) { //Each key
obj[key] = obj[key] || []; //Has to be an array if not exists
obj[key] = Array.isArray(obj[key]) ? obj[key] : [obj[key]]; //Has to be an array if not an array
obj[key].push(current[key]); //Add current item to array of matching key
});
return obj; //Continue to the next object in the array
});
console.log(result);
上述功能:Array#reduce
,Array#forEach
,Array.isArray
,Object.keys
都是ECMAScript 5规范的一部分,因此,它们在IE8和下方。
答案 3 :(得分:0)
let R = require('ramda');
let arr =[
{
'key1': 'a',
'key2': 'b',
'key3': 'c',
},{
'key1': 'a1',
'key2': 'b1',
'key3': 'c1',
},{
'key1': 'a2',
'key2': 'b2',
'key3': 'c2',
}
];
let key1 = R.pluck('key1', arr);
let key2 = R.pluck('key2', arr);
let key3 = R.pluck('key3', arr);
let obj = {
key1,
key2,
key3
};
Obj = { key1: [ 'a', 'a1', 'a2' ], key2: [ 'b', 'b1', 'b2' ], key3: [ 'c', 'c1', 'c2' ] }