34

假设我们有对象数组。

调用在具有索引的对象覆盖Object.assign(...array)具有索引的对象中的现有属性的那些对象之间进行继承ii-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 散布元素。
  • 为输出文字对象{}进行继承

?

我试过{...array}了,它返回{0:<array[0]>,1:<array[1]>,2:<array[2]>}的输出Object.assign(...array).

4

4 回答 4

49

你正在寻找

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

这会创建一个新对象而不是 mutating array[0]

于 2016-08-16T22:54:07.540 回答
3

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

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

于 2019-03-11T14:41:28.257 回答
0

如上所述,我认为您正在寻找的方法是.concat(),它创建一个数组的副本并用另一个数组扩展它。

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

a2 = a2.concat(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]
于 2019-10-30T08:37:04.040 回答
0

用数组对象分配对象:

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

var b = {
  approvers: [{
    id: '12'
  }]
}

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

于 2020-07-27T10:27:39.213 回答