puisque les données sont des chaînes et les chaînes n'ont pas de virgules, vous pouvez éviter toute itération l'espace utilisateur avec un RegExp dynamique:
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia']
var beenThere = ['Russia','Bhutan','India'];
(","+refArray+",").match(RegExp(",("+beenThere.join("|")+"),","g")).join(",").split(/,+/).slice(1,-1);
// == ["India", "Bhutan", "Russia"]
que l'on est bien en ce qu'elle doesn 't need [] .indexOf(), donc cela fonctionne dans les anciens navigateurs. vous pouvez utiliser un autre délimiteur en plus des virgules si les données contient une virgule, avec un code un peu plus laid ...
ou, en utilisant un filtre pour l'itération, mais avec une méthode native au lieu d'une fonction espace utilisateur:
var refArray = ['India','Pakistan','Nepal','Bhutan','SreeLanka','Singapore','Thailand','China','Russia']
var beenThere = ['Russia','Bhutan','India'];
refArray.filter(/./.test, RegExp("("+beenThere.join("|")+")","g"));
// == ["India", "Bhutan", "Russia"]
cela fonctionnerait probablement plus vite que indexOf(), mais le tri est une opération étrange, avec beaucoup d'opportunités d'optimisation en coulisses, donc les résultats peuvent varier.
"* un moyen plus rapide ** est ***" - que quoi? Je pense que vous devez soutenir cela. ;-) – RobG
+1 Pour une approche intéressante. – dfsq
indexOf() est cher. Si vous exécutez indexOf() sur le grand tableau deux fois par itération, cela fait plus de travail et prend donc plus de temps que d'exécuter un indexOf() sur le plus petit tableau à chaque itération. cela sera particulièrement vrai là où indexOf() est polyfilled par le code user-land. – dandavis