Solución:
Puedes usar :
const intersection = array1.filter(element => array2.includes(element));
Naturalmente, mi enfoque fue recorrer la primera matriz una vez y verificar el índice de cada valor en la segunda matriz. Si el índice es > -1
, luego push
en la matriz devuelta.
Array.prototype.diff = function(arr2) {
var ret = [];
for(var i in this) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
Mi solución no usa dos bucles como lo hacen otros, por lo que puede ejecutarse un poco más rápido. Si quieres evitar usar for..in
, puede ordenar ambas matrices primero para reindexar todos sus valores:
Array.prototype.diff = function(arr2) {
var ret = [];
this.sort();
arr2.sort();
for(var i = 0; i < this.length; i += 1) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
El uso se vería así:
var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];
console.log(array1.diff(array2));
Si tiene un problema / problema con la extensión del prototipo de Array, puede cambiarlo fácilmente a una función.
var diff = function(arr, arr2) {
Y cambiarías en cualquier lugar donde la función originalmente decía this
para arr2
.
Encontré una ligera alteración en lo que @ jota3 sugirió que funcionó perfectamente para mí.
var intersections = array1.filter(e => array2.indexOf(e) !== -1);
¡Espero que esto ayude!
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)