在Coffeescript中连接数组数组

时间:2011-01-08 00:24:30

标签: arrays coffeescript

我试图在Coffeescript中找到一种优雅的方式来合并一个数组数组,这样[[1,2,3],[4,5,6],[7,8,9]] == > [1,2,3,4,5,6,7,8,9]。

正如您可能想象的那样,我需要这个,因为我正在从“for in”构造中的函数生成数组,并且需要连接生成的嵌套数组:

  

result =(arr中x的generate_array(x))

有一种优雅的方式来处理这个问题吗?感谢您的任何指示!

5 个答案:

答案 0 :(得分:49)

只需使用JS习语:

 [].concat.apply([], a)

在咖啡中变得更好一些:

$ coffee -e 'a = [[1,2,3],[4,5,6],[7,8,9]]; console.dir [].concat a...'
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

答案 1 :(得分:5)

好的,一种方法是包含underscore.js库。它是一个非常好的,轻量级但功能强大的实用程序库,它有_.flatten,它正是这样做的。

除此之外,您可以使用underscore.js代码进行展平并修改它以删除任何其他下划线依赖项以创建您自己的独立“展平”。

这是下划线.js“_.flatten”代码:

 _.flatten = function(array) {
   return _.reduce(array, function(memo, value) {
     if (_.isArray(value)) return memo.concat(_.flatten(value));
     memo[memo.length] = value;
     return memo;
   }, []);
 };

请注意,它正在为您做一些好事。例如,许多下划线函数(如_.reduce)将检查浏览器是否已实现某些本机版本。如果是这样,它将使用本机,当然运行速度更快。 _.isArray实现也做同样的事情。

答案 2 :(得分:5)

咖啡怎么样

[[1, 2, 3], [4, 5, 6], [7, 8, 9]].reduce (a, b) ->
  a.concat b

或纯粹的Javascript

[[1, 2, 3], [4, 5, 6], [7 , 8, 9]].reduce((a, b) => a.concat(b));

答案 3 :(得分:0)

sugarjs是另一种优雅的方式:

[[1, 2, 3]].flatten() //=> [1, 2, 3]

sugarjs: flatten

答案 4 :(得分:-2)

Why not try using Lodash?

_.flatten([1,2,3], [4,5,6]) => [1,2,3,4,5,6]

https://lodash.com/docs#flatten