如何在ES6+中将两个javascript对象合并在一起?

2022-08-30 02:28:16

我厌倦了总是不得不写这样的代码:

function shallowExtend(obj1,obj2){
  var key;
  for ( key in obj2 ) {
    if ( obj2.hasOwnProperty(key) === false )  continue;
    obj1[key] = obj2[key]
  }
}

或者,如果我不想自己编写代码,请实现一个已经完成此操作的库。当然,ES6 +正在救援,这将为我们提供类似或Object.prototype.extend(obj2...)Object.extend(obj1,obj2...)

那么ES6+是否提供这样的功能呢?如果还没有,那么是否计划了此类功能?如果没有计划,那么为什么不呢?


答案 1

您将能够使用 Object.assignment 在 ES6 中执行浅合并/扩展/分配:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

语法:

Object.assign(targetsources);

其中...源表示源对象。

例:

var obj1 = {name: 'Daisy', age: 30};
var obj2 = {name: 'Casey'};

Object.assign(obj1, obj2);

console.log(obj1.name === 'Casey' && obj1.age === 30);
// true

答案 2

您可以使用对象传播语法来实现以下目的:

const merged = {...obj1, ...obj2}

对于数组,展开运算符已经是ES6(ES2015)的一部分,但对于对象,它被添加到ES9(ES2018)的语言规范中。它的提案早在Babel等工具中就默认启用。