你希望將兩個(gè)數(shù)組連接到一起。
在 JavaScript 中,有兩個(gè)標(biāo)準(zhǔn)方法可以用來連接數(shù)組。
第一種是使用 JavaScript 的數(shù)組方法 concat():
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array3 = array1.concat array2
# => [1, 2, 3, 4, 5, 6]
需要指出的是 array1 沒有被運(yùn)算修改。連接后形成的新數(shù)組的返回值是一個(gè)新的對(duì)象。
如果你希望在連接兩個(gè)數(shù)組后不產(chǎn)生新的對(duì)象,那么你可以使用下面的技術(shù):
array1 = [1, 2, 3]
array2 = [4, 5, 6]
Array::push.apply array1, array2
array1
# => [1, 2, 3, 4, 5, 6]
在上面的例子中,Array.prototype.push.apply(a, b) 方法修改了 array1 而沒有產(chǎn)生一個(gè)新的數(shù)組對(duì)象。
在 CoffeeScript 中,我們可以簡(jiǎn)化上面的方式,通過給數(shù)組創(chuàng)建一個(gè)新方法 merge():
Array::merge = (other) -> Array::push.apply @, other
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.merge array2
array1
# => [1, 2, 3, 4, 5, 6]
另一種方法,我可以直接將一個(gè) CoffeeScript splat(array2) 放入 push() 中,避免了使用數(shù)組原型。
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.push array2...
array1
# => [1, 2, 3, 4, 5, 6]
一個(gè)更加符合語言習(xí)慣的方法是在一個(gè)數(shù)組語言中直接使用 splat 運(yùn)算符(...)。這可以用來連接任意數(shù)量的數(shù)組。
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array3 = [array1..., array2...]
array3
# => [1, 2, 3, 4, 5, 6]
CoffeeScript 缺少了一種用來連接數(shù)組的特殊語法,但是 concat() 和 push() 是標(biāo)準(zhǔn)的 JavaScript 方法。