11
votes

Trouvez l'élément dans la matrice à l'aide de la correspondance Regex sans itération de la matrice

J'ai un éventail d'éléments xxx

à l'aide de JavaScript ou JQuery, je souhaite trouver l'index de l'élément qui commence "sortOrdon =" . Je ne connaîtrai pas la chaîne complète de cet élément lors de la compilation, juste le "sortOrdon =" partie.

Je suppose que cela peut être fait sans la nécessité de itérus de la matrice et effectuez item.match ("sortOrder =") , mais peut-être que je me trompe.

Merci pour toute aide.


1 commentaires

Vous devez faire une itération sur le tableau à un moment donné. Que ce soit résumé par un cadre ou non, il doit encore arriver.


5 Réponses :


1
votes

Si vous souhaitez trouver un article dans un tableau, vous devrez y introduire dessus. Si votre tableau est dans un ordre connu (par exemple: il est trié alphabétiquement), il y a quelques gains d'efficacité que vous pouvez construire dans l'algorithme de recherche (par exemple: la recherche d'arbres binaires), cependant, à moins que vous ne disposiez de milliers d'articles dans le tableau, il n'est guère va en valoir la peine. Dans votre cas, il suffit de boucler sur le tableau en vérifiant chaque article contre votre regex et de retourner lorsque vous trouvez une correspondance.


0 commentaires

-2
votes

Oui, vous avez tort - vous devez itérer. Dans ES5, il y a une nouvelle méthode pour trouver des positions de tableau - array.indexof mais il n'y a pas de support pour cela dans les navigateurs plus anciens et il a besoin d'une correspondance exacte non partielle.


1 commentaires

Ah ok oui, j'ai vu array.indexof et je me suis demandé s'il y avait quelque chose de similaire mais avec un match partiel. Honte qu'il n'y soit pas.



5
votes

Malheureusement, il n'y a pas de match partiel dans l'indexof ... Essayez cela et voyez s'il aide:

Array.prototype.MatchInArray = function (value) {

    var i;

    for (i=0; i < this.length; i++) {

        if (this[i].match(value)) {

           return i;

       }

   }

   return -1;

};


2 commentaires

envisagez de renvoyer l'index ( i ) ou -1 (si non trouvé), puisque cela fournit un peu plus d'informations et est à égalité avec array.indexof


Terminé. Merci @zamnuts !.



1
votes

nouveau Fonction Array.findindex de l'ES6 permet de faire ce que vous voulez, utilisez regex et non itérer sur une matrice.

Vous avez un échantillon de la façon dont il peut être fait: https://jsbin.com/qemeseyeme/edit?js,console p>

Code complet Échantillon: p>

const arr = ["page=4", "sortOrder=asc", "datePosted=all-time"];
const str = "sortOrder";

function isStringInArray(str, arr) {

  if (arr.findIndex(_strCheck) === -1) return false;

  return true;

  function _strCheck(el) {

    return el.match(str);
  }
}

console.log(isStringInArray(str, arr));


0 commentaires

24
votes

Si vous voulez obtenir la valeur forte> à l'intérieur d'un tableau qui correspond à une regex spécifique:

... pour obtenir la valeur du premier match seulement, vous Peut utiliser Trouver () P>

const array = ["page=4", "sortOrder=asc", "datePosted=all-time", "sortOrder=desc"];
const index = array.findIndex(value => /^sortOrder=/.test(value));
// index = 1;


0 commentaires