drc*_*ode 24 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))
有一种优雅的方式来处理这个问题吗?感谢您的任何指示!
mat*_*tyr 49
只需使用JS习语:
[].concat.apply([], a)
Run Code Online (Sandbox Code Playgroud)
在咖啡中变得更好一些:
$ 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 ]
Run Code Online (Sandbox Code Playgroud)
好的,一种方法是包含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;
}, []);
};
Run Code Online (Sandbox Code Playgroud)
请注意,它正在为您做一些不错的事情.例如,许多下划线函数(如_.reduce)将检查浏览器是否已实现某些本机版本.如果是这样,它将使用本机,当然运行速度更快._.isArray实现做同样的事情.
咖啡怎么样?
[[1, 2, 3], [4, 5, 6], [7, 8, 9]].reduce (a, b) ->
a.concat b
Run Code Online (Sandbox Code Playgroud)
或者这是纯粹的Javascript
[[1, 2, 3], [4, 5, 6], [7 , 8, 9]].reduce((a, b) => a.concat(b));
Run Code Online (Sandbox Code Playgroud)