当然、私のアプローチは、最初の配列を 1 回ループして、2 番目の配列の各値のインデックスをチェックすることでした。インデックスが の場合は> -1
、push
返された配列に追加されます。
Array.prototype.diff = function(arr2) {
var ret = [];
for(var i in this) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
私のソリューションは、他のソリューションのように 2 つのループを使用しないため、実行速度が少し速くなる可能性があります。の使用を避けたい場合はfor..in
、最初に両方の配列を並べ替えて、すべての値のインデックスを再作成できます。
Array.prototype.diff = function(arr2) {
var ret = [];
this.sort();
arr2.sort();
for(var i = 0; i < this.length; i += 1) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
使用法は次のようになります。
var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];
console.log(array1.diff(array2));
Array プロトタイプの拡張に問題がある場合は、これを簡単に関数に変更できます。
var diff = function(arr, arr2) {
this
そして、 func が最初に言った場所ならどこでも変更できますarr2
。