5 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
你可以find
用來(lái)檢查完全匹配
var peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" },
{ "name": "john", "dinner": "pie" }
];
var filteredResult = peoples.find(val => val.name ==="john" && val.dinner==="sushi");
console.log(filteredResult)

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
_.按 lodash 過濾
您可以通過 lodash 使用過濾器方法迭代集合的元素,返回所有元素的數(shù)組謂詞返回truthy for。謂詞使用三個(gè)參數(shù)調(diào)用:(值,索引|鍵,集合)。它返回一個(gè)新數(shù)組
https://lodash.com/docs/4.17.15#filter
lodash 上的過濾器使用示例
var users = [{
'user': 'barney',
'age': 36,
'active': true
},
{
'user': 'fred',
'age': 40,
'active': false
},
{
'user': 'fred',
'age': 39,
'active': true
}
];
console.log("matches:", _.filter(users, function(o) {
return !o.active;
}));
// => [{ active: true, age: 36, user: "barney"}]
// The `_.matches` iteratee shorthand.
console.log("_.matches` iteratee", _.filter(users, {
'user': 'fred',
'active': true
}));
// => [{ active: true, age: 39, user: "fred"}]
// The `_.matchesProperty` iteratee shorthand.
console.log("matchs poperty", _.filter(users, ['active', false]));
// => objects for ['fred']
// The `_.property` iteratee shorthand.
_.filter(users, 'active');
// => objects for ['barney']
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
_.where by underscore.js
你還可以使用underscore.js 的where方法查看列表中的每個(gè)值,返回一個(gè)包含與屬性中列出的鍵值對(duì)匹配的所有值的數(shù)組。 _.where(list, properties)
_.where 用法示例 _.where(listOfPlays, {author: "Shakespeare", year: 1611});
您基本上可以在普通的 javascript 中使用過濾器方法
var peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" },
{ "name": "john", "dinner": "pie" }
];
var dinner = peoples.filter(e=>e.name ==="john" && e.dinner==="sushi");
console.log(dinner)
您也可以使用 jquery grep
var peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" },
{ "name": "john", "dinner": "pie" }
];
var dinner = $.grep(peoples, function(people) {
return people.name === "john" && people.dinner === "sushi";
});
console.log(dinner)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
查找 vs 過濾器
var peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" },
{ "name": "john", "dinner": "pie" }
];
var filterDinner = peoples.filter(e=>e.name ==="john" && e.dinner==="sushi");
// return all matching results
console.log('filter dinner -:', filterDinner);
var findDinner = peoples.find(e=>e.name ==="john" && e.dinner==="sushi");
//returns the first matching rslt
console.log('find dinner -:', findDinner);
不推薦使用 Find,因?yàn)樗祷氐谝粋€(gè)匹配結(jié)果,并且假設(shè)我們有更多匹配結(jié)果,它們會(huì)被遺漏。

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
考慮以下。
var peoples = [{
"name": "bob",
"dinner": "pizza"
},
{
"name": "john",
"dinner": "sushi"
},
{
"name": "larry",
"dinner": "hummus"
},
{
"name": "john",
"dinner": "pie"
}
];
$.each(peoples, function(i, val) {
if (val.name == "john" && val.dinner == "sushi") {
console.log("Persons[" + i + "]." + Object.keys(val)[0] + ": " + val.name);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
這會(huì)迭代所有項(xiàng)目并比較每個(gè)項(xiàng)目的元素。

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
我不知道上下文,但可能有兩個(gè) john 并且都將晚餐屬性設(shè)置為 pie。我建議對(duì)數(shù)組中的每個(gè)條目使用 id 。如果您正在使用的數(shù)組是您列出的數(shù)組,您可以map在執(zhí)行搜索之前使用它進(jìn)行投影/轉(zhuǎn)換。例如
const people = [
{ name: "bob", dinner: "pizza" },
{ name: "john", dinner: "sushi" },
{ name: "larry", dinner: "hummus" },
{ name: "john", dinner: "pie" },
];
const peopleList = people.map((person, id) => ({ id, ...person }));
console.log(peopleList);
// You could start from here to search by id

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
您可以設(shè)置一個(gè)函數(shù)來(lái)定義您的搜索詞,然后使用Array.filter:
const peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" },
{ "name": "john", "dinner": "pie" }
];
searchTerms = (person) => {
return person.name === "john" && person.dinner === "sushi";
}
console.log(peoples.filter(searchTerms));
// [{ "name": "john", "dinner": "sushi" }]
添加回答
舉報(bào)