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

问题描述 投票:4回答:3

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

javascript underscore.js
3个回答
7
投票

使用._where不正确的方法?

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

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

使用更一般的_.filter函数:

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

当然,你可以使用与indexOf不同的东西。如果您想使用正则表达式,它可能如下所示:

return /im/.test(person.name);

2
投票

你可以使用_.filter

_.filter(people, function(person) { return person.name.match(new RegExp('im')); });

2
投票

在2017年你可以做到:

洛兹:

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

ES6:

people.filter(p => p.name.includes('im'))
© www.soinside.com 2019 - 2024. All rights reserved.