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
。你应该写你的代码。也许你可以解释你提出的解决方案,而不是仅仅发布一些代码发现于。