通过数组javascript进行搜索和筛选
请原谅标题我不知道如何描述我在做什么 我有一个文本区,人们可以在这里写评论,但他们也可以使用我制作的@ntify系统提及他人。。。现在,我唯一的问题是,一旦用户在@it之后开始键入,就不会缩小用户范围,所以我有一个这样的对象数组通过数组javascript进行搜索和筛选,javascript,Javascript,请原谅标题我不知道如何描述我在做什么 我有一个文本区,人们可以在这里写评论,但他们也可以使用我制作的@ntify系统提及他人。。。现在,我唯一的问题是,一旦用户在@it之后开始键入,就不会缩小用户范围,所以我有一个这样的对象数组 users = [ { name: steve, id: 47 }, { name: james, id: 41 }, { name: guy, id: 44 }, { name:
users = [
{
name: steve,
id: 47
},
{
name: james,
id: 41
},
{
name: guy,
id: 44
},
{
name: troy,
id: 32
}
]
如何根据在@
符号后写入的字符串筛选出数组中的用户?因此,如果我在文本区域中写入@tr,我的用户数组现在应该是这样的
users = [
{
name: troy,
id: 32
}
]
任何帮助都将不胜感激 使用
过滤器
检查被迭代的用户的名称
是否包含有问题的子字符串:
const用户=[
{
姓名:'史蒂夫',
身份证号码:47
},
{
姓名:“詹姆斯”,
身份证号码:41
},
{
名字:'盖伊',
身份证号码:44
},
{
名称:“特洛伊”,
身份证号码:32
}
];
const substr='tr';
console.log(
users.filter(({name})=>name.includes(substr))
);代码>试试这个
let str=“@tr”;
变量用户=[
{
姓名:“史蒂夫”,
身份证号码:47
},
{
姓名:“詹姆斯”,
身份证号码:41
},
{
姓名:“盖伊”,
身份证号码:44
},
{
名称:“特洛伊”,
身份证号码:32
}
];
const filteredUser=users.filter(user=>user.name.includes(str.replace(/@/,“”));
控制台日志(filteredUser)代码>您可能需要过滤器
const用户=[
{
姓名:'史蒂夫',
身份证号码:47
},
{
姓名:“詹姆斯”,
身份证号码:41
},
{
名字:'盖伊',
身份证号码:44
},
{
名称:“特洛伊”,
身份证号码:32
}, {
姓名:'斯蒂芬',
身份证号码:141
}
];
常量partialUserName='st';
const output=users.filter(user=>user.name.startsWith(partialUserName));
//如果需要,可以更改为包含
console.log(输出)
您可以尝试搜索方法
const substr = 'tr';
array.filter(( name ) => {
return (
name.toLowerCase()
.search(substr.toLowerCase()) !== -1
)
希望这有帮助我会推荐一种类似于其他答案的方法,但我会使用startsWith而不是include,并确保在比较两个字符串时将其小写。这将为您提供更准确的结果
const names=[{name:'Bob'},{name:'Sally'},{name:'Frank'},{name:'Lester'},{name:'Bo'},{name:'Salazar'},{name:'Frida'}];
const textArea=document.querySelector('[data id=“textArea”]');
const nameWrap=document.querySelector('[data id=“names”]');
函数inputListener(){
让shoullisten=false;
let指数;
返回(e)=>{
const{value}=e.currentTarget;
const currentValue=value[value.length-1];
如果(应该听){
if(currentValue==''|| value.length-1<索引){
shouldListen=false;
返回;
}
const str=(value.substr(index.match)(/@(+$)/)[1]).toLowerCase();
常量html=名称
.filter(({name})=>name.toLowerCase().startsWith(str))
.map(({name})=>`${name}`)
.加入(“”);
console.log(html)
nameWrap.innerHTML=html;
}
如果(currentValue=='@'&&!shouldListen){
shouldListen=true;
索引=值。长度-1;
}
}
}
textArea.addEventListener('input',inputListener())
抱歉,这只是另一个简单的问题,我如何才能只检查@
后面的字符串?SmokeyDawson如果输入字符串中确实包含@
,那么匹配@
后面的所有内容:值。匹配(/@(.+$)/[1]
,或者如果可能有多个@
@
@([^@+$)/
抱歉,这是另一个简单的问题,我如何只检查@后面的字符串?是的,这就是为什么我将“@”替换为“”。