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?
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)
3 Réponses :
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;
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.
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')){}...
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!
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!
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 a>
également pour RegEx stackoverflow.com/questions/23447021/...