【Underscore.js】_.intersectionを読んだ
jashkenas/underscoreの_.intersectionを読んだ。
概要
_.intersection(*arrays)
第一引数の配列の各値の中で、第二引数以降のすべての配列に含まれている値を返す。
var x = _.intersection([1, 10, 10, 3], [3 ,190, 10], [1, 545, 3, 10]); console.log(x); // [10, 3]
ソースコード
_.intersection = function(array) { var result = []; var argsLength = arguments.length; for (var i = 0, length = getLength(array); i < length; i++) { var item = array[i]; if (_.contains(result, item)) continue; for (var j = 1; j < argsLength; j++) { if (!_.contains(arguments[j], item)) break; } if (j === argsLength) result.push(item); } return result; };
第一引数の各値が、第二引数以降の配列にも含まれているかを_.containを使って調べている。
for (var j = 1; j < argsLength; j++) { if (!_.contains(arguments[j], item)) break; } if (j === argsLength) result.push(item); }
上記の処理は、すべての配列にitem(第一引数の値)が含まれているかを調べている部分。 引数で与えられた配列の数だけjがインクリメントされていれば、すべての配列に値が含まれている。