Javascript search array of arrays

Disons que nous avons le tableau js suivant

var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var val = [3,566,23,79]; 

Existe-t-il une fonction js builtin ou jQuery avec laquelle vous pouvez rechercher le tableau ar for val ?

Merci

** * MISE À JOUR * ** * ** * ** * ** *

En prenant la réponse de fusion, j'ai créé ce prototype

 Array.prototype.containsArray = function(val) { var hash = {}; for(var i=0; i<this.length; i++) { hash[this[i]] = i; } return hash.hasOwnProperty(val); } 

Vous pourriez créer un hash.

 var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var hash = {}; for(var i = 0 ; i < ar.length; i += 1) { hash[ar[i]] = i; } var val = [434,677,9,23]; if(hash.hasOwnProperty(val)) { document.write(hash[val]); } 

Vous pouvez également utiliser un tour avec la sérialisation JSON. C'est court et simple, mais un peu méfiant.
Cela fonctionne, car "[0,1]" === "[0,1]" .

Voici l'extrait de démonstration de travail:

 Array.prototype.indexOfForArrays = function(search) { var searchJson = JSON.stringify(search); // "[3,566,23,79]" var arrJson = this.map(JSON.stringify); // ["[2,6,89,45]", "[3,566,23,79]", "[434,677,9,23]"] return arrJson.indexOf(searchJson); }; var arr = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; document.body.innerText = arr.indexOfForArrays([3,566,23,79]); 
 function indexOfArray(val, array) { var hash = {}, indexes = {}, i, j; for(i = 0; i < array.length; i++) { hash[array[i]] = i; } return (hash.hasOwnProperty(val)) ? hash[val] : -1; }; 

Je considère que cela est plus utile que containsArray() . Il résout le même problème mais renvoie l'index plutôt qu'une valeur booléenne true ou false .

Je suppose qu'il n'existe aucune fonctionnalité JS disponible. Mais vous pouvez en créer un

 function arrEquals( one, two ) { if( one.length != two.length ) { return false; } for( i = 0; i < one.length; i++ ) { if( one[i] != two[i] ) { return false; } } return true; } 

Le problème avec ceci est celui de l'égalité objet / tableau dans Javascript. Essentiellement, le problème est que deux tableaux ne sont pas égaux, même s'ils ont les mêmes valeurs. Vous devez parcourir le tableau et comparer les membres à votre clé de recherche ( val ), mais vous aurez besoin d'un moyen de comparer avec précision les tableaux.

Le moyen le plus simple est d'utiliser une bibliothèque qui permet une comparaison tableau / objet. Underscore.js a une méthode très attrayante pour ce faire:

 for (var i = 0; i < ar.length; i++) { if (_.isEqual(ar[i], val)) { // value is present } } 

Si vous ne souhaitez pas utiliser une autre bibliothèque (même si je vous invite à – ou au moins à emprunter le message de la source de soulignement), vous pouvez le faire avec JSON.stringify

 var valJSON = JSON.stringify(val); for (var i = 0; i < ar.length; i++) { if (valJSON === JSON.stringify(ar[i]) { // value is present } } 

Cela sera certainement beaucoup plus lent.

Pouvez-vous essayer cela?

 var ar = [ [2,6,89,45], [3,566,23,79], [434,677,9,23] ]; var val = [3,566,23,79]; var sval = val.join(""); for(var i in ar) { var sar = ar[i].join(""); if (sar==sval) { alert("found!"); break; } } 

Pourquoi n'utilisez-vous pas les fonctions de javascript array?

 function filterArrayByValues(array, values) { return array.filter(function (arrayItem) { return values.some(function (value) { return value === arrayItem; }); }); } 

Ou si votre tableau est plus compliqué, et vous voulez comparer une seule propriété, mais comme résultat, retournez l'objet entier:

  function filterArrayByValues(array, values, propertyName) { return array.filter(function (arrayItem) { return values.some(function (value) { return value === arrayItem[propertyName]; }); }); } 

En savoir plus sur les fonctions utilisées: filter () et some ()

Vous pouvez utiliser Array.prototype.some() , Array.prototype.every() pour vérifier chaque élément de chaque tableau.

 var ar = [ [2, 6, 89, 45], [3, 566, 23, 79], [434, 677, 9, 23] ]; var val = [3, 566, 23, 79]; var bool = ar.some(function(arr) { return arr.every(function(prop, index) { return val[index] === prop }) }); console.log(bool);