在新的obj中使用ES6扩展符号覆盖

问题描述 投票:0回答:2

我有两个对象。

const resolver = {
  Query: {
    hi() {
      return 'Hello Level Up';
    }
  }
};

const resolver2 = {
  Query: {
    resolutions() {
      return [
        {
          _id: 'alksdfaqwef231adsf2',
          name: 'Get stuff done!'
        },
        {
          _id: 'wefqwefasdf',
          name: 'Get stuff done 2!'
        }
      ];
    }
  }
}

每当我做以下事情时:

const resolvers = { ...resolver, ...resolver2 };

第一个解析器被覆盖,如果我是console.log,我只有这个

{ Query: { resolutions: [Function: resolutions] } }

我希望它有:

{ Query: { hi: [Function: hi], resolutions: [Function: resolutions] } }
javascript object ecmascript-6
2个回答
3
投票

已经提到过,但这就是传播运营商的工作方式。要进行深度合并,您需要自己编写递归方法。或者使用一个非常受欢迎的名为deepmerge的小型图书馆。

在你的情况下,这将工作:

const resolvers = { 
  Query: {
    ...resolver.Query,
    ...resolver2.Query
  } 
};

1
投票

为了解决这个问题,我引入了一个名为lodash的包,并使用了merge方法。

const resolvers = merge(resolver, resolver2);

输出:

{ Query: { hi: [Function: hi], resolutions: [Function: resolutions] } }
© www.soinside.com 2019 - 2024. All rights reserved.