通过数组javascript进行搜索和筛选

通过数组javascript进行搜索和筛选,javascript,Javascript,请原谅标题我不知道如何描述我在做什么 我有一个文本区,人们可以在这里写评论,但他们也可以使用我制作的@ntify系统提及他人。。。现在,我唯一的问题是,一旦用户在@it之后开始键入,就不会缩小用户范围,所以我有一个这样的对象数组 users = [ { name: steve, id: 47 }, { name: james, id: 41 }, { name: guy, id: 44 }, { name:

请原谅标题我不知道如何描述我在做什么

我有一个文本区,人们可以在这里写评论,但他们也可以使用我制作的@ntify系统提及他人。。。现在,我唯一的问题是,一旦用户在@it之后开始键入,就不会缩小用户范围,所以我有一个这样的对象数组

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]
,或者如果可能有多个
@
@
@([^@+$)/
抱歉,这是另一个简单的问题,我如何只检查@后面的字符串?是的,这就是为什么我将“@”替换为“”。