2013-02-18 13 views
26

Działa dobrze, czy jest jakiś inny lepszy sposób na usunięcie duplikatów z jednej tablicy, jeśli zawiera elementy innej tablicy?Porównaj dwa tablice JavaScript i usuń duplikaty.

<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

Zdefiniuj "lepsze". –

+0

Mogę się mylić, ale nie sądzę, żeby to było wykonalne. Robisz 2 pętle – PositiveGuy

Odpowiedz

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

Lub z dostępnością ES6:

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

filter() reference here

indexOf() reference here

includes() reference here

+1

Dziękuję Esthete i chłopaki ... – sunleo

+1

Jako notatka i wyjaśnienie powyższego kodu: "indexOf: Zwraca pierwszy (najmniejszy) indeks elementu w tablicy równy określonej wartości, lub -1 jeśli nie znaleziono. " (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray) – Cedric

+0

Podoba mi się, ale zdecydowanie potrzebuje wyjaśnienie lub przynajmniej link prowadzący kogoś do właściwego miejsca, które to wyjaśnia. –

2

Zastosowanie 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>