Javascript 从对象数组中创建具有相同键的值数组

Javascript 从对象数组中创建具有相同键的值数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个如下所示的对象数组: [ { 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_

我有一个如下所示的对象数组:

[
     {
      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]
}
我想使用该对象创建另一个如下所示的对象:

[
     {
      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]
}
由于每个对象中的键是相同的,所以我只想将每个键对应的所有值保存在一个数组中

请,如果有谁曾经这样做过,可以分享代码,这将是伟大的。提前感谢。

result={};
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]];
            }
        }
    }
}
对于(var i=0;i
var-arr=[
{
键1:‘val_1.a’,
键2:‘val_2.a’,
键3:“val_3.a”
},{
键1:‘val_1.b’,
键2:‘val_2.b’,
键3:“val_3.b”
},{
键1:‘val_1.c’,
键2:‘val_2.c’,
键3:‘val_3.c’
}
]
var result=arr.reduce(函数(obj,current){//将数组还原为对象
Object.keys(当前).forEach(函数(键){//每个键
obj[key]=obj[key]| |[];//如果不存在,则必须是数组
obj[key]=Array.isArray(obj[key])?obj[key]:[obj[key]];//如果不是数组,则必须是数组
obj[key].push(当前[key]);//将当前项添加到匹配键的数组中
});
return obj;//继续到数组中的下一个对象
});

控制台日志(结果)您可以这样做,在所有浏览器中都可以使用,甚至在所有对象没有完全相同的密钥集时也可以使用(例如,它只会为存在的任何密钥积累数据):

函数组合KeyData(数据){
变量输出={},项;
//迭代外部数组以查看该数组中的每个项
对于(变量i=0;i
工作区:

说明:

  • 对于数组中的每个项
  • 对于数组中项目中的每个键
  • 如果该键不存在,则将其作为空数组添加到输出对象中
  • 将数据添加到输出对象中该键的数组末尾
  • 返回生成的新对象

  • 这将返回一个二维数组,他需要一个包含数组的对象。这还假设原始数组中的所有对象都具有完全相同的键集-不多不少。对于OP的精确数据来说,这是一种快捷方式,但它不是构建输出数据结构的最安全的方式。@jfriend00,现在它不再是了。如果结果有意义,那么这似乎是必要的。否则,生成的子数组中的元素之间的对应将是错误的。这是不好的。例如,什么是值是
    null
    。你应该写你的代码。也许你可以解释你提出的解决方案,而不是仅仅发布一些代码发现于。