JS:从项目列表对象中部分搜索项目

时间:2017-11-20 22:05:17

标签: javascript angular typescript filter

我有一个列表对象,我从Web服务加载,我的列表以这种形式出现:

list = { "name1 Surname1" , "name2" , "name3Surname3" , "surname4" } 

你可以看到我有不同的格式:

用空格分隔名字 - 姓氏,仅名称,仅姓氏。

我的目的是按姓名或姓氏搜索会员;我的结果应该是其中一个名单成员。

例如:

  • 如果我搜索:“name1” - > 结果:name1 Surname1
  • 如果我搜索:“name1 Surn” - > 结果:name1 Surname1
  • 如果我搜索:“name1 SurAAA” - > 结果 :(没有)
  • 如果我搜索:“AAAA Surname1” - > 结果 :(没有)
  • 如果我搜索:“name1Surname1” - > 结果 :(没有)
  • 如果我搜索:“name” - > 结果:name1 Surname1,name2,name3Surname3,surname4

总结:

我应该搜索项目:

  • 对应我搜索的项目
  • 从我搜索的项目开始

我尝试过过滤器解决方案,如下所示:

findItems(name) {
      this.splits = name.toLowerCase().split(' ');
      if (this.splits.length >= 1) {
        results = this.namesList.filter(item => this.splits.indexOf(item.brand.toLowerCase()) !== -1);
      }else {
        results = [];
      }
  }

但此解决方案仅搜索与我的搜索项目完全相对应的项目,并且缺少部分搜索

建议?

2 个答案:

答案 0 :(得分:0)

您可以使用regexRegExp()来完成此操作。请注意,这将返回所有匹配结果的array

let list = [ 'name1 Surname1' , 'name2' , 'name3Surname3' , 'surname4' ];

function findItems(name) {
     return list.filter(item => {
    const regex = new RegExp(name, 'gi');
    return item.match(regex);
  });
  }
  
console.log(findItems('name1 s')); // outputs ["name1 Surname1"]

答案 1 :(得分:0)

如果您的名字在列表而不是对象中,这是一个简单的解决方案



list = [ "name1 Surname1" , "name2" , "name3Surname3" , "surname4" ]


function findItems(searchedName, nameList) {
      return nameList.map((nameString) => {
      if(nameString.includes(searchedName))
          return nameString;
      });
}
  
console.log(findItems("name", list))