从两个对象的数组产生对象

时间:2019-07-13 12:22:37

标签: javascript arrays object

我试图弄清楚如何将两个对象组成一个数组并将它们合并为一个对象。

首先,这是我从两个数组生成组合数组的操作:

let p;
let v;
let combinedArray = [];

for (let diff of differences) {
  for (let mapping of mappings) {
    if (diff.path[0] === mapping.rhs) {
      p = diff.path[0];
      v = diff.rhs;
      combinedArray.push({ p, v });
    }
  }
}

生成的组合数组如下:

[ { p: 'prop_1', v: 'x1' },
  { p: 'prop_2', v: 'x2' } ]

接下来我要做的是创建一个看起来像这样的最终对象:

{ 'prop_1': 'x1', 'prop_2': 'x2' }

如何从上面“组合”数组的结果中做到这一点?而且,顺便说一句,如果有一种更简单的方法从我最初的两个数组开始就可以做到这一点,那么我全力以赴。在这里打开建议。

2 个答案:

答案 0 :(得分:2)

将您的CombinedArray更改为对象并像这样使用

combinedArray[p] = v 

如果需要同时使用两种结构,则可以在当前输出中进一步使用reducedestructuring

let data = [ { p: 'prop_1', v: 'x1' },
  { p: 'prop_2', v: 'x2' } ]
  
let final = data.reduce((op,{p,v}) => {
  op[p] = v
  return op
},{})

console.log(final)

答案 1 :(得分:2)

我将跳过创建combinedArray并立即进入目标对象结构。替换:

combinedArray.push({ p, v }); 

具有:

combinedObject[p] = v

很显然,您将combinedObject初始化为{}

现在,如果您真的想将combinedArray转换为普通对象,那么Object.fromEntries是您的朋友:

const combinedArray = [{ p: 'prop_1', v: 'x1' }, { p: 'prop_2', v: 'x2' }];
  
const combinedObject = Object.fromEntries(combinedArray.map(({p, v}) => [p, v]));

console.log(combinedObject);

如果您的combinedArray已经成对了,那会更容易。这样就可以完成combinedArray.push([p, v])。在这种情况下,您只需要Object.fromEntries(combinedArray)