![](/img/trans.png)
[英]Add Items into Empty array in Reducer give Error 'TypeError: Invalid attempt to spread non-iterable instance.'
[英]“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
可以是一個包含更多Objects
的Array
,也可以是一個Object
實例...
問。)我想知道是否有一種快速方法可以處理從兩個 Arrays 或一個 Array 和一個單一 object... 創建新Array
? 我假設以下可能有效:
let x = []
let y = {} OR []
let z = [...x, ...y];
當y
是Array
時,這很好,但是當 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.