"TypeError: Invalid attempt to spread non-iterable instance":将数组或对象添加到数组



因此,要在Javascript中将一个数组添加到另一个数组,有:

康卡特((

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']

push.apply((

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

。传播运算符

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = [...x, ...y];
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']

但是,假设var xObjectsArrayvar y可以是更ObjectsArray也可以Object实例......

问。我想知道是否有一种快速方法可以处理从两个数组或一个数组和一个单一对象创建新Array......?我认为以下内容可能有效:

let x = []
let y = {} OR []
let z = [...x, ...y];

yArray时,这很好,但是当 y 是Object时,我们会看到TypeError: Invalid attempt to spread non-iterable instance......那么,有什么可能的方法可以避免这种情况吗?

正如Harmandeep所说,这可能是一个实现:

const concat = (a,b) => [
...a,
...(Array.isArray(b) ? b : [b])
]
console.log(
concat([{a:'a'}], [{b:'b'}]),
concat([{a:'a'}], {b:'b'}),
)

let x = ['a', 'b']
let a = {}
let b = [{}]
console.log(x.concat(a))
console.log(x.concat(b))

这取决于您要实现的目标。

let x = ['a','b']
let y = {} OR [{}]
let z = ...;

如果您期待

z = ['a','b',{}]

Array.prototype.concat可以解决这个问题。

let z = x.concat(y)

Array.prototype.concat 处理数组和非数组并相应地附加它们

有什么可能的方法可以避免这种情况吗?

是的,类型防护装置

let y: object | Array<object>  = {}
let z: Array<any> = [];
if(y instanceof Array) {
let z = [...x, ...y];
}

最新更新