簡體   English   中英

“TypeError:傳播不可迭代實例的無效嘗試”:將數組或 Object 添加到數組

[英]“TypeError: Invalid attempt to spread non-iterable instance”: Adding either an Array or Object to an Array

因此,要在 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 x是一個Objects Array ,而var y可以是一個包含更多ObjectsArray可以是一個Object實例...

問。)我想知道是否有一種快速方法可以處理從兩個 Arrays 或一個 Array 和一個單一 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相應地處理 arrays 和非 arrays 和 append 它們

有沒有可能的方法來避免這種情況?

是的, 類型保護

let y: object | Array<object>  = {}
let z: Array<any> = [];

if(y instanceof Array) {
   let z = [...x, ...y];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM