我试图在 Coffeescript 中找到一种优雅的方式来合并数组数组,以便 [[1,2,3],[4,5,6],[7,8,9]] ==> [1 ,2,3,4,5,6,7,8,9]。
正如您可能想象的那样,我需要这个,因为我正在从“for in”构造中的函数生成数组,并且需要连接生成的嵌套数组:
结果 = (generate_array(x) for x in arr)
有没有一种优雅的方法来处理这个?感谢您的任何指点!
我试图在 Coffeescript 中找到一种优雅的方式来合并数组数组,以便 [[1,2,3],[4,5,6],[7,8,9]] ==> [1 ,2,3,4,5,6,7,8,9]。
正如您可能想象的那样,我需要这个,因为我正在从“for in”构造中的函数生成数组,并且需要连接生成的嵌套数组:
结果 = (generate_array(x) for x in arr)
有没有一种优雅的方法来处理这个?感谢您的任何指点!
只需使用 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 ]
好的,一种方法是包含underscore.js库。它是一个非常漂亮、轻量级但功能强大的实用程序库,它的 _.flatten 正是这样做的。
除此之外,您可以将 underscore.js 代码用于 flatten 并对其进行修改以删除任何其他下划线依赖项以创建您自己的独立“flatten”。
下面是 underscore.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 实现做同样的事情。
咖啡这个怎么样
[[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));