按特定顺序对名称数组进行排序

时间:2019-06-22 06:49:40

标签: javascript arrays for-loop discord.js

我正在开发一款不和谐的机器人,并且有一个按字母顺序排列的字符数组列表。我要尝试做的是使它使某人在使用命令{"meta":{"subtitle":"Apartment for Rent in Marina Gate 1, Marina Gate","price":145000,"price_text":"145,000 AED/year","contact_options":{"list":{"phone":{"type":"phone","value":"+XXXXXXXX","link":"tel:+XXXXXXXX","is_did":true},"email":{"type":"email","value":"name@email.com","link":"mailto:name@email.com"}},"details":{"phone":{"type":"phone","value":"+XXXXXXXX","link":"tel:+XXXXXXXX","is_did":true},"sms":{"type":"sms","value":"+XXXXXXXX","link":"sms:+XXXXXXXX"},"email":{"type":"email","value":"name@email.com","link":"mailto:name@email.com"}}},"images_count":11}}' 时,机器人将通过for循环浏览数组,并从与最接近开头的块匹配的数组中获取名字。字符串。 例如:

$info (name)

这是我到目前为止所拥有的。现在,如果我尝试执行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*/ ,它将抢到Albert,因为它首先在阵列上碰到了他的名字。 我考虑过使用substring和charAt,但是我找不到一种有效的方法。我也在考虑使用findIndex或indexOf,但无法弄清楚如何使用它。

$info ber

3 个答案:

答案 0 :(得分:1)

您可以将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

答案 1 :(得分:1)

您可以将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)

答案 2 :(得分:0)

这最终是我的最终代码ty ori和mark

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