5

我正在尝试使用 usercore 做一些类似于 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不正确的方法吗?如果没有,有什么更好的方法来解决这个问题?

4

3 回答 3

7

使用 ._where 不是正确的方法吗?

是的。_.where返回“包含所有列出的键值对的值”。这种完全匹配不是您想要的。

有什么更好的方法来解决这个问题?

使用更通用的_.filter功能:

var filteredPeople = _.filter(people, function(person) {
    return person.name.indexOf("im") > -1;
});

当然,您可以使用不同于indexOf. 如果你想使用正则表达式,它可能看起来像:

return /im/.test(person.name);
于 2013-06-04T17:48:53.447 回答
3

在 2017 年,您可以:

lodash

_.filter(people, p => _.includes(p.name, 'im'))

es6

people.filter(p => p.name.includes('im'))
于 2017-08-08T13:01:15.183 回答
2

您可以使用_.filter

_.filter(people, function(person) { return person.name.match(new RegExp('im')); });
于 2013-06-04T17:49:25.027 回答