如何从javascript中的两个对象中创建一个对象?

时间:2019-07-10 14:18:56

标签: javascript

我正在处理Javascript Application,我有一个对象和一个Array对象,我想从这两个对象中创建一个新对象。

我拥有的对象:

let test1 = { p1: 50, p2: 0, p3: 1 };
let test2 = [ { code: 'p1', search_key: 'search_p1' }
            , { code: 'p2', search_key: 'search_p2' }
            , { code: 'p3', search_key: 'search_p3' }
            ];

最终结果将是:

let test3 = {search_p1: 50, search_p2: 0, search_p3: 1};

3 个答案:

答案 0 :(得分:2)

通过test2进行简单的迭代,然后在新对象test3中进行赋值:

let test1 = {p1: 50, p2: 0, p3: 1};
let test2 = [ {code: 'p1', search_key: 'search_p1'}, {code: 'p2', search_key: 'search_p2'}, {code: 'p3', search_key: 'search_p3'} ];
const test3 = {};

test2.forEach((element) => {
    test3[element.search_key] = test1[element.code];
});
// { search_p1: 50, search_p2: 0, search_p3: 1 }

答案 1 :(得分:2)

您可以使用Array.reduce在数组之外创建一个新对象。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

这里,我还使用es6的动态对象键语法以及object spread operatorFull details here.)在每次迭代中返回一个新对象,并向该对象添加了一个新条目,其中键为值的项目。

search_key,该值是test1 [item.code]

的值

let test1 = { p1: 50, p2: 0, p3: 1 };
let test2 = [ { code: 'p1', search_key: 'search_p1' }
            , { code: 'p2', search_key: 'search_p2' }
            , { code: 'p3', search_key: 'search_p3' }
            ];

const test3 = test2.reduce((accum, item)=>({ ...accum, [item.search_key]: test1[item.code] }), {})

console.log( JSON.stringify(test3)) 

答案 2 :(得分:1)

您可以映射该数组并为新对象构建一个etries数组。

let test1 = { p1: 50, p2: 0, p3: 1 },
    test2 = [{ code: 'p1', search_key: 'search_p1' }, { code: 'p2', search_key: 'search_p2' }, { code: 'p3', search_key: 'search_p3' }],
    result = Object.fromEntries(test2.map(({ code, search_key }) => [search_key, test1[code] ]));

console.log(result);