JavaScript の配列には、集合演算子が無い。仕事で使いそう且つ頭の体操も兼ねて、和集合、差集合、積集合を求めるコードを書いてみた。
//helper method function include(item, target) { for (var i = 0, len = target.length; i < len; i++) { if (item == target[i]) { return true; } } return false; } function union(arrayA, arrayB) { var result = arrayA.concat(); for (var i = 0, len = arrayB.length; i < len; i++) { if (!include(arrayB[i], result)) { result.push(arrayB[i]); } } return result; } function difference(arrayA, arrayB) { var result = []; for (var i = 0, len = arrayA.length; i < len; i++) { if (!include(arrayA[i], arrayB)) { result.push(arrayA[i]); } } return result; } function intersection(arrayA, arrayB) { var result = []; for (var i = 0, len = arrayB.length; i < len; i++) { if (include(arrayB[i], arrayA)) { result.push(arrayB[i]); } } return result; }
以下、実行結果。ソートされていないが、不具合はなさそうだ。
var a = [1, 2, 3, "a"]; var b = [1, 4, 5, 6, "a", "あ"]; console.log(union(a, b)); //=> [1, 2, 3, "a", 4, 5, 6, "あ"] console.log(union(b, a)); //=> [1, 4, 5, 6, "a", "あ", 2, 3] console.log(difference(a, b)); //=> [2, 3] console.log(difference(b, a)); //=> [4, 5, 6, "あ"] console.log(intersection(a, b)); //=> [1, "a"] console.log(intersection(b, a)); //=> [1, "a"]