recorrer objetos eliminar elemento ejemplos buscar array agregar javascript arrays

objetos - Calcular la intersección de dos matrices en JavaScript



map javascript (4)

¿Quieres encontrar la intersección de dos matrices?

Podrías usar la intersection() de Underscore intersection() . Esto le dará una lista de los valores presentes en ambas matrices.

var commonValues = _.intersection(arr1, arr2);

jsFiddle .

Si no quisieras usar una biblioteca, sería trivial de implementar ...

var commonValues = arr1.filter(function(value) { return arr2.indexOf(value) > -1; });

jsFiddle .

Si Array.prototype.filter() y Array.prototype.indexOf() no son compatibles con sus plataformas de destino ...

var commonValues = []; var i, j; var arr1Length = arr1.length; var arr2Length = arr2.length; for (i = 0; i < arr1Length; i++) { for (j = 0; j < arr2Length; j++) { if (arr1[i] === arr2[j]) { commonValues.push(arr1[i]); } } }

jsFiddle .

Dadas dos matrices de longitud desigual:

var arr1 = ["mike", "sue", "tom", "kathy", "henry"]; //arr1.length = 5 var arr2 = ["howey", "jim", "sue", "jennifer", "kathy", "hank", "alex"]; //arr2.length = 7

¿Cómo puedo encontrar los valores comunes a ambas matrices? En este caso deben devolverse "sue" y "kathy" .


Aquí hay una función de intersección basada en Array.prototype.filter

function intersect(a, b) { var t; if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter return a.filter(function (e) { return b.indexOf(e) > -1; }); } var arr1 = ["mike", "sue", "tom", "kathy", "henry"]; arr2 = ["howey", "jim", "sue", "jennifer", "kathy", "hank", "alex"]; intersect(arr1, arr2); // ["sue", "kathy"]

También es posible que desee considerar lo siguiente

var arr1 = [''sue'', ''sue'', ''kathy''], arr2 = [''kathy'', ''kathy'', ''sue''];

Lo anterior ahora daría ["sue", "sue", "kathy"] . Si no desea duplicados, podría hacer un filtro adicional sobre esto. Esto también estandarizaría los resultados. es decir

return a .filter(/* .. */) // same as before .filter(function (e, i, c) { // extra step to remove duplicates return c.indexOf(e) === i; });

Agregar esto ahora devolverá el mismo resultado que los arreglos anteriores ( ["sue", "kathy"] ), aunque hubiera duplicados.


Iterar sobre una de las matrices y comparar los objetos con la otra:

var results = []; for (var i = 0; i < arr1.length; i++) { if (arr2.indexOf(arr1[i]) !== -1) { results.push(arr1[i]); } }


Podrías usar Array.filter :

var result = arr1.filter(function(n) { return arr2.indexOf(n) > -1; });