配列のflatten
1538 ワード
微博で手作業で実現したという人を見た.flatten([1,[2,[2,[2,1]]),2]を[1,2,2,1,2])に変えることで履歴書を送ることができ、履歴書を送るのに興味がなく、一つ実現してみることができます.考えてみると実はこれは難しくなく、私の実現は以下の通りである:
var flatten = function(arr) {
var index = arguments[1] || 0;
var destArr = arr.slice(0, index).concat(arr[index]).concat(arr.slice(index + 1));
return index === arr.length ? arr: arguments.callee(destArr, ++index);
}
concat ,concat 。 , 2。 concat , :
Array.prototype.flatten = function() {
var flattened = Array.prototype.concat.apply([], this);
if (flattened.length == this.length) return flattened;
else return flattened.flatten();
}
underscore _.flatten
_.flatten = function(array, shallow) {
// , demo
return _.reduce(array, function(memo, value) {
// , :
// - , Array.prototype.concat
// - , flatten ,
if(_.isArray(value))
return memo.concat( shallow ? value : _.flatten(value));
// (value) , , memo
memo[memo.length] = value;
return memo;
}, []);
};