由两个对象组成对象数组

时间:2019-06-15 08:09:06

标签: javascript arrays object

我需要从2个对象组成一个对象数组:id对象和values对象。

我不明白如何同时对两个对象进行排序并比较它们的键以构成对象的结果数组

id: {
 value1: 1,
 value2: 2,
 value3: 3,
};
values: {
 value1: 11,
 value2: 22,
 value3: 33,
};

两个对象的键名可能相同。 需要有这样的东西:

result:[
 {1: 11},
 {2: 22},
 {3: 33},
]

3 个答案:

答案 0 :(得分:1)

您需要收集idvalues对,然后使用对象渲染新数组。

var data = { id: { value1: 1, value2: 2, value3: 3 }, values: { value1: 11, value2: 22, value3: 33 } },
    result = Array.from(
        Object
            .entries(data)
            .reduce(
                (m, [l, o]) => Object
                    .entries(o)
                    .reduce((n, [k, v]) => n.set(k, Object.assign({ [l]: v }, n.get(k))), m),
                 new Map
            )
            .values(),
        ({ id, values }) => ({ [id]: values })
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

尝试一下:


let result = [];
Object.keys(id).forEach((key)=>{
    let temp = {};
    temp[id[key]] = values[key];
    result.push(temp)
})

这将为您提供输出,如上所述,但我不明白为什么您希望result是数组而不是对象。

答案 2 :(得分:0)

如果idvalue中的键相同,则可以简单地映射其中一个键,并使用该键从每个对象获取相应的值:

let data = {id: {value1: 1,value2: 2,value3: 3,},values: {value1: 11,value2: 22,value3: 33,}}

let result = Object.keys(data.id).map(k => ({[data.id[k]]: data.values[k]}))
console.log(result)