Naturalmente, il mio approccio è stato quello di scorrere il primo array una volta e verificare l'indice di ogni valore nel secondo array. Se l'indice è > -1
, quindi push
sull'array restituito.
Array.prototype.diff = function(arr2) {
var ret = [];
for(var i in this) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
La mia soluzione non fa uso di due cicli come gli altri fanno così può funzionare un po 'più veloce. Se si vuole evitare di utilizzare for..in
, è possibile ordinare entrambi gli array prima reindicizzare tutti i loro valori:
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;
};
Uso sarà simile:
var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];
console.log(array1.diff(array2));
Se si dispone di un problema/problema con l'estensione del Array prototipo, potresti facilmente cambiarlo in una funzione.
var diff = function(arr, arr2) {
E che ci si cambia ovunque dove il func originariamente detto this
a arr2
.
simile a http: // stackoverflow.com/questions/1885557/simplest-code-for-array-intersection-in-javascript –