[英]How to filter collection with multiple conditions (strings and array of values) using lodash javascript
我正在嘗試使用 lodash 過濾具有多個條件的集合,它適用於字符串,但我想通過 id 數組過濾部分位置和字符串過濾狀態。 我試圖將 id 更改為 id 的"location":{"id":["1","4"]},
但它不起作用
const collection = [
{account: {id: "1", name: "a"}, location:{id: "1", name: "x"}, status: "ok"},
{account: {id: "2", name: "b"}, location:{id: "2", name: "x"}, status: "ok"},
{account: {id: "3", name: "c"}, location:{id: "4", name: "y"}, status: "failed"},
{account: {id: "4", name: "d"}, location:{id: "4", name: "y"}, status: "ok"},]
let filterByConditions = {
"location":{"id" :"1"},
"account":{ "id": "1"},
"status": "ok",
};
let results = _.filter(collection, filterByConditions);
看起來您正在嘗試將filter方法與“匹配”速記一起使用。 這個速記不支持“或”條件; 只有完全匹配。 但是,您可以將謂詞傳遞給_.filter
方法,它會起作用:
const collection = [
{account: {id: "1", name: "a"}, location:{id: "1", name: "x"}, status: "ok"},
{account: {id: "2", name: "b"}, location:{id: "2", name: "x"}, status: "ok"},
{account: {id: "3", name: "c"}, location:{id: "4", name: "y"}, status: "failed"},
{account: {id: "4", name: "d"}, location:{id: "4", name: "y"}, status: "ok"},]
let filterByPredicate = (elem) => {
return elem.status === "ok" &&
elem.location.id === "1" &&
(elem.account.id === "1" || elem.account.id === "4");
};
let results = _.filter(collection, filterByPredicate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.