我试图在Coffeescript中找到一种优雅的方式来合并数组数组,以便[[1,2,3],[4,5,6],[7, 8,9]] ==> [1,2,3,4,5,6,7,8,9]。在Coffeescript中连接数组数组
正如你可能想象,我需要这个因为我从函数产生阵列的“对”构造和需要连接所得的嵌套数组:
结果=(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]。在Coffeescript中连接数组数组
正如你可能想象,我需要这个因为我从函数产生阵列的“对”构造和需要连接所得的嵌套数组:
结果=(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代码展平,并对其进行修改以删除任何其他下划线依赖关系,以创建您自己的独立“展平”。
这里的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));
不错。不知道它会如此简洁。谢谢。 – 2011-01-08 00:41:06
成语是辉煌的 - 感谢让我意识到它! – drcode 2011-01-08 00:41:46