Удаление повторяющихся значений с помощью Javascript

var arr1=["a","b","b","c","c","d"];
var arr2=["b","c",];

arr1 имеет повторяющиеся значения, которые перечислены в arr2. Теперь я хочу удалить повторяющиеся значения из arr1, используя arr2. Является ли это возможным?


person Pearl    schedule 26.09.2013    source источник
comment
stackoverflow.com/questions/13486479/javascript-array-unique   -  person Asif    schedule 26.09.2013
comment
Посетите эту ссылку stackoverflow.com/ вопросы/14930516/   -  person    schedule 26.09.2013


Ответы (2)


Я бы использовал метод .filter() массива.

arr1 = arr1.filter(function (val) {
    return arr2.indexOf(val) === -1;
});




Для IE8 или более ранней версии этот код должен работать:

arr1 = arr1.filter(function (val) {
    var i;
    for (i = 0; i < arr2.length; i += 1) {
        if ( val === arr2[i] ) {
            return false;
        }
    }
    return true;
});
person Joe Simmons    schedule 26.09.2013
comment
Свойство или метод indexOf не определен... - person Pearl; 26.09.2013
comment
У меня отлично работает на Firefox 23.0.1. Что скажет ваш браузер, если вы это сделаете? alert(Array.prototype.indexOf); ? Если он предупреждает функцию, мой код должен работать. Если нет... это действительно странно, потому что filter и indexOf были добавлены в одну и ту же версию JavaScript. - person Joe Simmons; 26.09.2013
comment
попробуйте это, если браузер ‹IE 9. if(!Array.indexOf){ Array.prototype.indexOf = function(obj){ for(var i=0; ithis.length; i++){ if(this[i ]==obj){ вернуть i; } } вернуть -1; } } - person joydesigner; 26.09.2013
comment
Ах... тогда почему .filter() поддерживается? Странный. Я обновил свой ответ для спрашивающего, для IE8 и ранее. - person Joe Simmons; 26.09.2013
comment
Вы тестировали это на странице с какими-либо библиотеками? Возможно, поэтому - я почти уверен, что IE8 не имеет .filter() изначально. - person Qantas 94 Heavy; 26.09.2013

вы можете использовать непосредственно для удаления дубликатов из массива1 как

 $(document).ready(function(){
     var arr1=["a","b","b","c","c","d"];
     var arr2=[];   

     $.each(arr1, function(i,el){
            if($.inArray(el, arr2) === -1) 
                arr2.push(el);
           });
      alert(arr2);
   });

тут можно понаблюдать..

http://jsfiddle.net/nPeaV/7410/

person dileep kommireddy    schedule 26.09.2013