如何在underscore.js中返回部分匹配数组

时间:2013-06-04 17:44:35

标签: javascript underscore.js

我正在尝试使用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的方法不正确吗?如果没有,那么最好的办法是什么?

3 个答案:

答案 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)

2017年你可以做到:

<强> lodash

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

<强> ES6

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