我正在开发一款不和谐的机器人,并且有一个按字母顺序排列的字符数组列表。我要尝试做的是使它使某人在使用命令{"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
答案 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];
}
}