Сортировка по массиву имен в определенном порядке - PullRequest
1 голос
/ 22 июня 2019

Я работаю над диссон-ботом, и у меня есть список символов в алфавитном порядке.Я пытаюсь сделать так, чтобы, когда кто-то использовал команду $info (name), бот просматривал массив с циклом for и извлекал имя из массива, совпадающее с блоком, ближайшим к началу строки.,Так, например:

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

Это то, что я имею до сих пор.Прямо сейчас, если бы я попытался сделать $info ber, он бы схватил Альберта, потому что сначала он встречается с его именем в массиве.Я думал об использовании подстроки и charAt, но я не мог найти эффективный способ сделать это.Я также думал об использовании findIndex или indexOf, но не мог понять, как заставить это работать с этим.

for(let i = 0; i < namelist.length; i++){
 if(namelist[i].includes(name)){
 object = namelist[i];
 console.log(object);
 break;
 }
}

Ответы [ 3 ]

1 голос
/ 22 июня 2019

Вы можете использовать find() с startswith(), чтобы получить первый соответствующий элемент из отсортированного списка:

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 голос
/ 22 июня 2019

Вы можете использовать Array.find() с Array.startsWith(), чтобы получить имена, начинающиеся со строки. Поскольку пользователи могут использовать заглавные буквы при поиске, используйте String.toLowerCase() в строке поиска.

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
0 голосов
/ 22 июня 2019

это был мой окончательный код, ты ори и знак

            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];
                        }               
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...