Je travaille sur un robot discord et j'ai une liste de tableaux de caractères classés par ordre alphabétique. Ce que j'essaie de faire est de faire en sorte que lorsque quelqu'un utilise la commande $ info (nom)
, le bot regarde à travers le tableau avec une boucle for et saisit le prénom du tableau qui correspond le morceau le plus proche du début de la chaîne.
Par exemple:
for(let i = 0; i < namelist.length; i++){ if(namelist[i].includes(name)){ object = namelist[i]; console.log(object); break; } }
C'est ce que j'ai jusqu'à présent. Pour le moment, si j'essayais de faire $ info ber
, cela attraperait Albert parce qu'il se trouve d'abord dans son nom sur le tableau.
J'ai pensé à utiliser substring et charAt mais je n'ai pas trouvé de moyen efficace de le faire. Je pensais aussi utiliser findIndex ou indexOf mais je ne savais pas comment faire fonctionner cela.
let namelist = ['adam', 'al', 'albert', 'bertie', 'cole']; $info a /*would grab Adam because he's the first on the list alphabetically with an 'A' in his name*/ $info ber /*would grab bertie because he's the first on the list with a ber in the beginning of his name, and not grab albert who has a ber later in his name and is ahead of bertie in the array*/
3 Réponses :
Vous pouvez utiliser Array.find ()
avec Array.startsWith ()
pour obtenir des noms commençant par une chaîne. Étant donné que les utilisateurs peuvent utiliser des lettres majuscules lors de la recherche, utilisez String.toLowerCase ()
sur la chaîne de recherche.
const namelist = ['adam', 'al', 'albert', 'bertie', 'cole']; const getName = str => namelist.find(s => s.startsWith(str.toLowerCase())); console.log(getName('a')); // admin console.log(getName('ber')) // bertie console.log(getName('Ber')) // bertie
C'est exactement ce que je cherchais, tyvm!
Vous pouvez utiliser find ()
avec startswith ()
pour récupérer le premier élément correspondant dans une liste triée:
let namelist = ['adam', 'al', 'albert', 'bertie', 'cole']; let s = "ber" let found = namelist.find(item => item.startsWith(s)) console.log(found) s = 'a' found = namelist.find(item => item.startsWith(s)) console.log(found)
Exactement ce que je cherchais, tyvm!
cela a fini par être mon code final, ty ori et marque
let words = args[0]; let object = ""; let temparray = []; let found = namearray.find(item => {item.startsWith(args[0])}); for(let i = 0; i <= namearray.length; i++){ if(i < namearray.length && namearray[i].startsWith(words)){ object = namearray[i]; console.log(object); break; } else if(i < namearray.length && namearray[i].includes(words)){ temparray.push(namearray[i]); console.log(temparray); } else if(i >= namearray.length && found === undefined){ console.log(temparray[0]); object = temparray[0]; } }