2013-04-09 7 views
11

Mam dwie tablice w JavaScript -:Get unikalne wartości z dwóch tablic i umieścić je w innym tablicy - Jquery

var array1 = ['12','1','10','19','100']; 
var array2 = ['12','10','19']; 

muszę sposobu, aby uzyskać wyjątkowy z dwóch tablic i umieścić je w array3 Array3 powinien być: - var array3 = ['1','100'];

Dzięki za pomoc.

+0

Proszę zajrzeć do dokumentacji underscore.js. Biblioteka udostępnia wiele narzędzi obiektów i tablic i jest dostępna po stronie klienta i serwera. – lib3d

Odpowiedz

23
var array3 = array1.filter(function(obj) { return array2.indexOf(obj) == -1; }); 

MDN na Array # Filtr: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter

Zawiera PolyFill dla starszych przeglądarek.

+1

Świetna odpowiedź Bret. Wielkie dzięki – sanchitkhanna26

+0

Powoduje to złożoność o (n^2), która staje się dość powolna podczas przetwarzania dużych tablic. – mzedeler

+0

Ale mam nadzieję, że nie będę miał tak dużej macierzy, aby uzyskać o (n^2) złożoność. Dzięki – sanchitkhanna26

2

coś takiego

var array1 = ['12','1','10','19','100']; 
var array2 = ['12','10','19']; 
var o = {}; 
for(var i in array1) { 
    o[i] = 1; 
} 
for(var i in array2) { 
    o[i] = 0; 
} 
var array3 = []; 
for(var i in o) { 
    if(o[i] == 1) { 
     array3.push(i); 
    } 
} 
+0

Istnieje bardziej ogólna odpowiedź tutaj: http://stackoverflow.com/questions/8628059/check-if-every-element-in-one-array-is-in-a-second-array/15536709#15536709 – mzedeler

+1

Czy nie działa, jeśli tablica 1 ma unikalne wartości, których nie ma tablica 2. – mix3d

+0

Tak. Moje rozwiązanie nie jest symetryczne. Pierwotne pytanie nie jest całkowicie jasne, czy jest to wymóg, czy nie. – mzedeler

0

Podobnie jak powyżej, ale będzie pracować z więcej niż dwóch tablic

var array1 = ['12','1','10','19','100']; 
var array2 = ['12','10','19']; 
var i = 0; 
var hist = {}; 
var array3 = []; 

buildhist(array1); 
buildhist(array2); 

for (i in hist) { 
    if (hist[i] === 1) { 
     array3.push(i); 
    } 
} 

console.log(array3); 

function buildhist(arr) { 
    var i; 
    for (i = arr.length - 1; i >= 0; i--) { 
     if (hist[arr[i]] === undefined) { 
      hist[arr[i]] = 0; 
     } 
     hist[arr[i]]++; 
    } 
} 
4
var unique = []; 
for(var i = 0; i < array1.length; i++){ 
    var found = false; 

    for(var j = 0; j < array2.length; j++){ // j < is missed; 
    if(array1[i] == array2[j]){ 
     found = true; 
     break; 
    } 
    } 
    if(found == false){ 
    unique.push(array1[i]); 
    } 
} 
0
var array3 = array1.concat(array2); 

array3 = array3.sort(function(a, b) { return a > b; }); 
array3 = array3.filter(function(num, index) { return num !== array3[index + 1]; }); 

array3 będzie miał tylko unikatowe wartości

to również wykonuje pracę w tw o pętle, które są dość niedrogie, należy zauważyć, że sort() i filtr() są funkcjami ECMA5 i nie są obsługiwane w starszych przeglądarkach, również zazwyczaj korzystam z biblioteki podobnej do podkreślenia, więc nie przepisuję tych funkcji dla każdego projektu pracować, podkreślenia ma metodę .unique(), która oczywiście jest mniej kodu i bardziej wyraźnie stwierdza zamiar operacji

0
var array1 = ['12','1','10','19','100']; 
var array2 = ['12','10','19']; 


var newArr,temp,temp1; 


    temp=array1.filter(function(el) 
       { 
       return arr2.indexOf(el) == -1; 

       }); 

    temp1=array2.filter(function(el) 
       { 
       return arr1.indexOf(el) == -1; 

       }); 

    newArr=temp.concat(temp1); 


    return newArr; 

} 
1

z odrobiną magii ES6 może być dość zwięzłe. Zwróć uwagę, że musimy sprawdzić obie metody, aby znaleźć unikalne elementy w obu tablicach.

const arr1 = [1,2,3,4,5]; 
const arr2 = [1,3,8]; 

let unique1 = arr1.filter((o) => arr2.indexOf(o) === -1); 
let unique2 = arr2.filter((o) => arr1.indexOf(o) === -1); 

const unique = unique1.concat(unique2); 

console.log(unique); 
// >> [ 2, 4, 5, 8] 
+0

Jeśli 'arr2' zawiera unikalny numer, to nie zostanie dodane do' unikalnego'. –

+0

@curly_brackets - dzięki, edytowane! Nie jest to już tak zwięzłe, prawdopodobnie jest to bardziej zawiły sposób, ale jest to przynajmniej całkiem czytelne. –

Powiązane problemy