óCoffeeScript Cookbook

连接数组

问题

你想把两个数组合并到一起。

方法

在JavaScript中有两种标准的方法来合并数组。

第一种是使用JavaScript Array的concat()方法:

array1 = [1, 2, 3]
array2 = [4, 5, 6]
array3 = array1.concat array2
# => [1, 2, 3, 4, 5, 6]

需要注意的是array1在操作中没有被修改。串接的数组返回一个新的对象。

如果你希望合并两个数组而不创建新对象,你可以使用以下技巧:

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对象,而无需创建一个新数组对象。

我们可以使用CofeeScript为数组创建一个新的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]

作为Array原型的替代,我们可以直接给push()传递一个参数列(array2…)。

array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.push array2...
array1
# => [1, 2, 3, 4, 5, 6]97

详解

CoffeeScript虽然缺少链接数组的特殊语法,但concat()push()是JavaScript标准的方法。