按特定顺序对名称数组进行排序
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];
【讨论】:
以上是关于按特定顺序对名称数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章