Object.assign(...数组)的替代方案

时间:2016-08-16 22:47:16

标签: javascript babeljs ecmascript-next

假设我们有对象数组。

调用Object.assign(...array)在索引i的对象覆盖索引为i-1的对象中的现有属性的那些对象之间进行继承

例如:



var array=[{interf:'IPerson',name:'Someone'},{clss:'Person',name:'Ahmed'},{student:true}];
console.log(
    Object.assign(...array) // Object.assign(array[0],array[1],array[2])
)




现在,使用Babel和建议的对象扩展语法,我们可以静态地执行此操作:

{...array[0],...array[1],...array[2]} // spread used for each object not for array

如何动态地执行此操作?

"传播语法"的上下文重叠。我的意思是如何使用扩展语法:

  • 用于传播元素的数组。
  • 输出文字对象{}进行继承

我尝试{...array}并返回{0:<array[0]>,1:<array[1]>,2:<array[2]>} Object.assign(...array)相同的输出。

4 个答案:

答案 0 :(得分:29)

您正在寻找

var obj = Object.assign({}, ...array)

创建一个新对象,而不是改变array[0]

答案 1 :(得分:1)

在我看来,您正在寻找的方法是.concat()

返回一个新数组,该数组是目标和源的合并。

答案 2 :(得分:0)

如上所述,我要寻找的方法是.concat(),它创建一个数组的副本或将其扩展为另一个数组。


var a1 = [1,2,3], a2 = [];

a2 = a2.concate(a1);

// or ES5 shorten alternative 
// var a1 = [1,2,3], a2 = [].concat(a1);

// or better ES6 shorten alternative 
// a2 = [...a1];

a2.push(4);

console.log(a1, a2);

// a1 -> [1,2,3], a2 -> [1,2,3,4]

答案 3 :(得分:0)

使用数组对象分配对象

var a = {'name':'Ajay'}

var b = {批准者:[{id:'12'}]}

var c = Object.assign(a,b);

console.log(c);