2013-02-18 2 views
26

Хорошо работает ли другой лучший способ удаления дубликатов из одного массива, если он содержит элементы другого массива?Сравните два массива Javascript и удалите дубликаты

<script> 
var array1 = new Array("a","b","c","d","e","f"); 
var array2 = new Array("c","e"); 

for (var i = 0; i<array2.length; i++) { 
    var arrlen = array1.length; 
    for (var j = 0; j<arrlen; j++) { 
     if (array2[i] == array1[j]) { 
      array1 = array1.slice(0, j).concat(array1.slice(j+1, arrlen)); 
     } 
    } 
} 
alert(array1); 

</script> 
+0

Определить "лучше". –

+0

Я мог ошибаться, но я не думаю, что это будет исполнитель. Вы делаете 2 цикла – PositiveGuy

ответ

74
array1 = array1.filter(function(val) { 
    return array2.indexOf(val) == -1; 
}); 

Или, при наличии ES6:

array1 = array1.filter(val => !array2.includes(val)); 

filter() reference here

indexOf() reference here

includes() reference here

+1

Спасибо Esthete и fellas ... – sunleo

+1

В качестве примечания и объяснения приведенного выше кода: «indexOf: возвращает первый (наименьший) индекс элемента в массиве, равный указанному значению, или -1, если ни один не найден ». (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray) – Cedric

+0

Мне это нравится, но это определенно необходимо объяснение или, по крайней мере, ссылку, направляющую кого-то в нужное место, что объясняет это. –

2

Использование Array.splice()

var array1 = ['1', '2', '3', '4', '5']; 
var array2 = ['4', '5']; 
var index; 
for (var i=0; i<array2.length; i++) { 
    index = array1.indexOf(array2[i]); 
    if (index > -1) { 
     array1.splice(index, 1); 
    } 
} 
0
window.onload = function() { 
     var array1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']; 
     var array2 = ['c', 'h', 'k']; 
     var array3 = []; 
     var SecondarrayIndexcount = 0; 
     for (var i = 0; i < array1.length; i++) { 
      for (var j = 0; j < array2.length; j++) { 
       if (array1[i] !== array2[j]) { 
        if (SecondarrayIndexcount === (array2.length - 1)) { 
         array3.push(array1[i]); 
         SecondarrayIndexcount = 0; 
         break; 
        } 
        SecondarrayIndexcount++; 
       } 
      } 
     } 
     for (var i in array3) { 
      alert(array3[i]); 
     } 
    } 
</script> 
Смежные вопросы