簡體   English   中英

如何使用 lodash 過濾具有多個條件(字符串和值數組)的集合 javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM