我有一个列表对象,我从Web服务加载。我的清单以这种形式出现:
list = [ {id:"name1 Surname1" , nb:120} ,
{id:"name2", nb:632} ,
{id:"name3Surname3", nb:102} ,
{id:"surname4", nb:896}
]
我的搜索策略是通过" id" 。 如您所见,我有不同的格式:
用空格分隔名字 - 姓氏,仅名称,仅姓氏。
我的目的是通过id(其名称或姓氏值)搜索成员。 我的结果应该是IDS包含我的搜索值项目的项目。
例如:
总结:
我应该搜索项目:
我尝试过过滤器解决方案,如下所示:
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 = [];
}
}
但此解决方案仅搜索与我的搜索项目完全相对应的项目,并且缺少部分搜索。
答案 0 :(得分:2)
使用过滤器并包含
let list = [ {id:"name1 Surname1" , nb:120} ,
{id:"name2", nb:632} ,
{id:"name3Surname3", nb:102} ,
{id:"surname4", nb:896}
]
searchForString = (list,string) => {
return list.filter((obj) => {
return obj["id"].includes(string);
});
}
let isPresent = searchForString(list,"name");
console.log(isPresent)

答案 1 :(得分:0)
您可以在不事先拆分的情况下使用indexOf。
function findItems(value) {
value = value.toLowerCase();
return list.filter(function (item) {
return item.id.toLowerCase().indexOf(value) !== -1;
});
}
var list = [{ id: "name1 Surname1", nb: 120 }, { id: "name2", nb: 632 }, { id: "name3Surname3", nb: 102 }, { id: "surname4", nb: 896 }];
console.log(findItems('name1'));
console.log(findItems('name1 Surn'));
console.log(findItems('name1 SurAAA'));
console.log(findItems('AAAA Surname1'));
console.log(findItems('ame1Surname1'));
console.log(findItems('name'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
将名称字符串拆分为数组并循环遍历数组并与项目ID进行比较
function findItems(name){
var l = list.filter(function(obj) {
var ks = name.split(" ");
for(var i = 0; i < ks.length ; i++){
return obj.id.indexOf(ks[i]) >= 0
}
});
return l;
}