Естественно, мой подход состоял в том, чтобы пропустить первый массив один раз и проверить индекс каждого значения во втором массиве. Если индекс > -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;
};
Мое решение не использует две петли, как и другие, поэтому может работать немного быстрее. Если вы хотите избежать использования 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) {
И вы изменили бы где-нибудь, где func первоначально сказал this
на arr2
.