Разница между & # 32; и & NBSP;

Естественно, мой подход состоял в том, чтобы пропустить первый массив один раз и проверить индекс каждого значения во втором массиве. Если индекс > -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.

13
задан Ketan 16 August 2012 в 09:13
поделиться