我正在尝试使用userscore执行与jQuery UI中的自动完成小部件类似的操作。我尝试过使用_.where()
,但只有在完全匹配时才有效。
这有效:
var people = [
{ id: 1, name: "Jimmy" },
{ id: 2, name: "Johnny" },
{ id: 3, name: "Susan" },
{ id: 4, name: "Tim" },
{ id: 5, name: "Betty" },
{ id: 6, name: "Ralph" }
];
var filteredPeople = _.where(people, { name: "Jimmy" });
但我想要的是这样的:
var filteredPeople = _.where(people, { name: "im" }); //Should return "Jimmy" and "Tim"
使用._where
的方法不正确吗?如果没有,那么最好的办法是什么?
答案 0 :(得分:7)
使用._ where不是正确的方法吗?
是。 _.where
返回“值,其中包含列出的所有键值对”。这种完全匹配不是你想要的。
什么是更好的方法来解决这个问题?
使用更通用的_.filter
函数:
var filteredPeople = _.filter(people, function(person) {
return person.name.indexOf("im") > -1;
});
当然,您可以使用与indexOf
不同的内容。如果您想使用正则表达式,它可能如下所示:
return /im/.test(person.name);
答案 1 :(得分:2)
您可以使用_.filter
:
_.filter(people, function(person) { return person.name.match(new RegExp('im')); });
答案 2 :(得分:2)
<强> lodash 强>:
_.filter(people, p => _.includes(p.name, 'im'))
<强> ES6 强>:
people.filter(p => p.name.includes('im'))