我試圖在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