因此,要在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
实例......
问。我想知道是否有一种快速方法可以处理从两个数组或一个数组和一个单一对象创建新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 处理数组和非数组并相应地附加它们
有什么可能的方法可以避免这种情况吗?
是的,类型防护装置
let y: object | Array<object> = {}
let z: Array<any> = [];
if(y instanceof Array) {
let z = [...x, ...y];
}