2
votes

Comment obtenir un élément spécifique dans un tableau sans connaître la chaîne exacte

TLDR; Existe-t-il un moyen d'utiliser $ .inArray en ne sachant que par quoi l'élément commence ou contient?

J'ai un tableau d'éléments et j'aimerais pouvoir pour choisir un élément qui commence par une certaine chaîne car la valeur est dynamique.

Par exemple:

Mon tableau est:

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
var result = array.filter(function (el) {
    return el.includes("Alpha_GB") === true;
});
console.log(result);

Mais pour chaque utilisateur, l'ordre et les noms exacts peuvent changer.

Utilisez jQuery, je peux faire ce qui suit pour obtenir l'élément si je connais la valeur exacte.

let array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
let result = array.filter((el) => el.includes("Alpha_GB") === true);
console.log(result);

Cependant, comme tout après Go change pour chaque élément du chargement de la page, je ne peux pas l'utiliser car je ne connais pas la chaîne exacte.

Existe-t-il un moyen d'utiliser $. inArray en ne sachant que par quoi l'élément commence ou contient?

RÉPONSE

Merci beaucoup pour votre aide! J'apprécie vraiment.

En fin de compte, la meilleure réponse pour moi a été la réponse de Louis:

var order = $.inArray("Alpha_GB8732", array)
$item = $(array).get(order)

Cela n'a pas fonctionné pour moi au début. .. parce que gulp-uglify pour une raison quelconque n'a pas pu compiler le script es6 . Donc, juste pour tous ceux qui peuvent avoir le même problème lors de la compilation, voici la même chose mais dans es5:

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]

Encore une fois, merci beaucoup pour votre aide à tous! (@Louis, @ControlAltDel)


4 commentaires

vous pouvez utiliser array.filter


En relation: stackoverflow.com/questions/25073710/...


Vous pouvez utiliser indexOf et s'il renvoie> -1, il est présent. Si vous avez le début, vous pouvez utiliser startsWith


également pour RegEx stackoverflow.com/questions/23447021/...


3 Réponses :


1
votes

Vous pouvez utiliser un filtre, comme

array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
var find = array.filter(function(item) {
  return (this === "Alpha_GB8732");
});
find = (find.length > 0) ? find[0] : null;


3 commentaires

Ah, je ne savais pas que vous publieriez une réponse aussi =) La mienne est basée sur votre commentaire. FWIW, c'est de toute façon une meilleure implémentation.


En fait, le vôtre ne retournera-t-il pas seulement vrai s'il y a une correspondance exacte de la chaîne complète?


@ Lewis oui. Mais rien ne vous empêche d'utiliser une expression régulière à la place d'une chaîne égale.



1
votes

Basé sur le commentaire de ControlAltDel, vous pouvez utiliser Array.filter () . Voir l'exemple ci-dessous;

let array = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]
let result = array.filter((el) => el.includes("Alpha_GB") === true);
console.log(result);

// You could turn this in to a function
function arrayContains(arr, str){
  return arr.filter((el) => el.includes("Alpha_GB") === true).length > 0;
}

console.log(arrayContains(array, 'Alpha_GB')); // returns true

// And use it like this
//if(arrayContains(array, 'Alpha_GB')){}...


1 commentaires

C'est une excellente solution car j'en avais vraiment besoin pour n'inclure que la chaîne au lieu d'être une correspondance exacte. Merci!



1
votes

Vous devez donc filtrer le tableau en fonction de certains caractères à l'intérieur. Voici comment cela devrait fonctionner:

const MyArray = ["Alpha_GB8732", "Beta_GB29834", "Gamma_GB2384", "Delta_GB23984"]

//you can replace .startswith() with any function that you might need. you can also apply .toLowerCase() to filter case-insensitive items

const filteredArray = MyArray.filter((x) => x.startsWith("N"));

console.log(filteredArray);

J'espère que cela aide!


0 commentaires