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

Posted

技术标签:

【中文标题】按特定顺序对名称数组进行排序【英文标题】:Sorting through an array of names in a specific order 【发布时间】:2019-11-04 21:14:30 【问题描述】:

我正在开发一个不和谐的机器人,我有一个按字母顺序排列的字符数组列表。我想要做的是,当有人使用命令$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,它会抓住 Albert,因为它首先在阵列上遇到了他的名字。 我考虑过使用 substring 和 charAt 但我找不到有效的方法。我也在考虑使用 findIndex 或 indexOf,但不知道如何使用它。

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


【问题讨论】:

【参考方案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)

【讨论】:

正是我想要的,tyvm!【参考方案2】:

您可以使用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

【讨论】:

这正是我要找的,tyvm!【参考方案3】:

这最终成为我的最终代码,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];
                                       
                    

【讨论】:

以上是关于按特定顺序对名称数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按多个数组对 Tableview 行进行排序

如何按特定顺序对 .then() 调用进行排序? [复制]

根据字符串属性按字母顺序对对象数组进行排序

如何对大量 csv 文件进行排序以按特定顺序读取它们?

c++ 按字母顺序排序名称

如何按特定顺序对猫鼬进行排序?