Naturellement, mon approche consistait à parcourir le premier tableau en boucle une fois et à vérifier l'index de chaque valeur dans le second tableau. Si l'index est > -1
entonces push
sur le tableau retourné.
Array.prototype.diff = function(arr2) {
var ret = [];
for(var i in this) {
if(arr2.indexOf(this[i]) > -1){
ret.push(this[i]);
}
}
return ret;
};
Ma solution n'utilise pas deux boucles comme d'autres le font, elle peut donc fonctionner un peu plus vite. Si vous voulez éviter d'utiliser for..in
vous pouvez d'abord trier les deux tableaux pour réindexer toutes leurs valeurs :
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;
};
L'usage serait le suivant :
var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];
console.log(array1.diff(array2));
Si vous avez un problème avec l'extension du prototype Array, vous pouvez facilement le transformer en fonction.
var diff = function(arr, arr2) {
Et tu changerais n'importe quel endroit où le func disait initialement this
a arr2
.