1
votes

Trier un tableau de noms dans un ordre spécifique

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*/


0 commentaires

3 Réponses :


1
votes

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


1 commentaires

C'est exactement ce que je cherchais, tyvm!



1
votes

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)


1 commentaires

Exactement ce que je cherchais, tyvm!



0
votes

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];
                        }               
                    }


0 commentaires