打字稿-将对象分配给数组

时间:2020-05-11 18:14:07

标签: typescript

我想将一个对象分配给数组,但是在赋值函数中出现此错误

期望至少1个参数,但有1个或更多

var obj1 = [{ abc: 'abc value' }];

var obj2 = { def: 'new def value'};

var obj3 = Object.assign(...obj1 , obj2) ;

3 个答案:

答案 0 :(得分:0)

您需要使用如下的Object.assign链接

var obj1 = [{ abc: 'abc value' }];
var obj2 = { def: 'new def value' };
var obj3 = Object.assign(Object.assign({}, ...obj1), obj2 );

答案 1 :(得分:0)

在这种情况下,您应该使用数组扩展,Object.assign用于将所有可枚举的自身属性从一个或多个源对象复制到目标对象,因此在这种情况下没有用。

请注意,数组扩展将,将obj1的值复制到新数组中,并将obj2作为最后一个元素。

var obj3 = [...obj1, obj2];

如果您要定位IE,则可以使用:

var obj3 = obj1.slice();
obj3.push(obj2);

注意:数组扩展不适用于IE。

Object.assign的MDN:

Object.assign()方法将所有可枚举的自身属性从一个或多个源对象复制到目标对象。它返回目标对象。

Object.assign

Array spread syntax

答案 2 :(得分:0)

根据您要执行的操作,您的方法可能会导致意外复制。

const obj1 = [{ abc: 'abc value' }, { abc: 'abc value at index 2' }];
const obj3 = Object.assign(...obj1 , obj2);

将导致数组中的最后一项覆盖具有匹配键的所有先前设置的值。

{ abc: 'abc value at index 2', def: 'new def value' }

如果您希望将某些内容复制到数组中的所有对象,则要在对象数组上使用.map()

const obj1 = [{ abc: 'abc value' }, { abc: 'abc value at index 2' }];
const obj3 = obj1.map(obj => Object.assign(obj, obj2));