javascript - 合并 2 个对象数组,其中一个设置键,另一个设置值

标签 javascript arrays object

我有 2 个对象 ab 定义如下:

a = {
  1:3,
  2:5,
  3:1,
}

b = {
  1:{name:"Bob"},
  2:{name:"John"},
  3:{name:"Alice"}
}

我想要得到的是以下对象c定义为

c = {
  "Bob":3,
  "John":5,
  "Alice":1
}

因此创建一个使用 b[key].name 作为 c[key] 和 a[key] 作为值。

到目前为止我尝试过的是

const mapAandB = (a, b) => {
  let finalObject = [];
  Object.keys(b).forEach(key => {
    return finalOdds.push({ [b[key].name]: a[key] });
  });
  return finalOdds;
};

但是结果是

c = [
  0:{Bob:3}, 
  1:{John: 5}, 
  2:{Alice:1}
]

如果您有任何建议...

最佳答案

您可以使用Array#reduce将名称和值收集到对象中:

const a = {"1":3,"2":5,"3":1}

const b = {"1":{"name":"Bob"},"2":{"name":"John"},"3":{"name":"Alice"}}

const result = Object.keys(a).reduce((r, key) => {
  r[b[key].name] = a[key];
  
  return r;
}, {});

console.log(result);

或者您可以使用Array#map创建一系列对象,并使用 Object#assign 将它们组合成一个对象和 spread :

const a = {"1":3,"2":5,"3":1}

const b = {"1":{"name":"Bob"},"2":{"name":"John"},"3":{"name":"Alice"}}

const result = Object.assign(...Object.keys(a).map((key) => ({ [b[key].name]: a[key] })));

console.log(result);

关于javascript - 合并 2 个对象数组,其中一个设置键,另一个设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229315/

相关文章:

c++ - 如何删除数组 C++?

javascript - 访问数组值返回 'undefined' ,但我可以使用 console.dir() 查看这些值?

javascript - 将 session 存储值更改为未定义应该会影响 ngIf,而无需单击两次

javascript - 为什么使用 ng-repeat 时图表会附加到现有的 div 中?

javascript - 通过参数传递图像,JQuery Mobile

javascript - 在同一个对象中调用 value 返回 undefined

python - 在 Python 中调用实例变量时遇到问题

Javascript 复选框验证

javascript - chrome 扩展中的 localStorage - 扩展还是页面存储?

ruby - 如何选择独特的元素