首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ECMAScript 6中合并两个对象并增加键

在ECMAScript 6中合并两个对象并增加键
EN

Stack Overflow用户
提问于 2018-07-01 23:53:25
回答 3查看 97关注 0票数 1

我想将几个对象合并在一起,但因为它们的键是相等的,所以在使用Object.assign()时,它只返回与上一个相同的属性。

代码语言:javascript
复制
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"};
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"};

但是我想要的输出

代码语言:javascript
复制
let output = {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f", 6: "g", 7: "h"};
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-02 00:03:19

你真的应该使用数组来做这件事。这会让你的生活更轻松。

话虽如此,您可以从对象中获取values,这将是数组,连接它们,然后使用以下命令创建一个新对象:

代码语言:javascript
复制
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}

let obj = Object.values(obj1).concat(Object.values(obj2))
          .reduce((a, c, i) => (a[i] = c, a), {})
console.log(obj)

您还可以对以下内容使用扩展语法:

代码语言:javascript
复制
let obj1 = {0: "a", 1: "b", 2: "c", 3: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}

let obj = {...Object.values(obj1).concat(Object.values(obj2))}
console.log(obj)

对于这样的情况,应该发生什么是不明确的:

代码语言:javascript
复制
let obj1 = {0: "a", 1: "b", 2: "c", 4: "d"}
let obj2 = {0: "e", 1: "f", 2: "g", 3: "h"}
票数 5
EN

Stack Overflow用户

发布于 2018-07-02 00:09:39

您可以通过连接所有值来连接任意数量的对象,并将它们分配回一个对象。

代码语言:javascript
复制
let obj1 = { 0: "a", 1: "b", 2: "c", 3: "d" },
    obj2 = { 0: "e", 1: "f", 2: "g", 3: "h" },
    merged = Object.assign({}, [obj1, obj2].reduce((r, o) => r.concat(Object.values(o)), []));
    
console.log(merged);

票数 2
EN

Stack Overflow用户

发布于 2018-07-02 00:05:02

创建一个对象数组,使用reduce method.Pass,一个空对象作为thisArg,并保留一个将增加的index,这个index将充当一个key.Inside,reduce方法使用Object.values,它将给一个数组提供当前对象的所有值,如[a,b,c,d]。现在迭代此数组并更新最初传递的空白对象

代码语言:javascript
复制
let obj1 = {
  0: "a",
  1: "b",
  2: "c",
  3: "d"
};
let obj2 = {
  0: "e",
  1: "f",
  2: "g",
  3: "h"
};
let comObj = [obj1, obj2]
let index = 0;
let mrgObj = comObj.reduce(function(acc, curr) {
  let getVals = Object.values(curr);
  getVals.forEach(function(item, currIndex) {
    acc[index] = item
    index++;
  })
  return acc;
}, {});
console.log(mrgObj)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51124812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档