【Underscore.js】_.flattenを読んだ
jashkenas/underscoreの_.flattenを読んだ。
概要
_.flatten(array, [shallow])
入れ子になっている配列を、一次元の配列に変換する。 shallowがtrueの時は、一つだけ入れ子をなくす。
list = [1, 10, 7, [190, 43], [[1]]]; var x = _.flatten(list); console.log(x); // [1, 10, 7, 190, 43, 1]
ソースコード
var flatten = function(input, shallow, strict, startIndex) { var output = [], idx = 0; for (var i = startIndex || 0, length = getLength(input); i < length; i++) { var value = input[i]; if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { //flatten current level of array or arguments object if (!shallow) value = flatten(value, shallow, strict); var j = 0, len = value.length; output.length += len; while (j < len) { output[idx++] = value[j++]; } } else if (!strict) { output[idx++] = value; } } return output; }; // Flatten out an array, either recursively (by default), or just one level. _.flatten = function(array, shallow) { return flatten(array, shallow, false); };
shallowを指定しない場合は、下記のコードで再帰的に入れ子を1つずつなくしていっている。
if (!shallow) value = flatten(value, shallow, strict);