前回まとめた 、 iterator 系の機能map/reduce/each系を上手に使えば、flatten も作れる。このへんはrubyと同じで行けて嬉しいね。
flattenするのも楽ちんだよ。
> [[1],[2],[3],[4]].reduce(function(v,e){ return v.concat(e) },[]) [ 1, 2, 3, 4 ] >
Array#flatten
Array.prototype.flatten = function() { var a = this.reduce( function(e,v){ if ( v instanceof Array ) { v = v.flatten(); } e = e.concat(v); return e; } ,[] ); return a; } > [[1],[2],[3],[[4]]].flatten() [ 1, 2, 3, 4 ]
prototypeを使えば結構楽ちんですね。JavaScriptのIteration拡張素晴らしいです。
使いやすく修正
Array.prototype.flatten = function() { return this.reduce((e,v)=>e.concat(v.flatten==this.flatten ? v.flatten():v),[]) }
2014-05-14 追加
flatten を再帰的にした。
2017/12/22 修正
Chromeのコンソールからコピーしたコードが間違ってたので修正