簡體   English   中英

Lodash 查找對象數組

[英]Lodash find for Array of objects

我有以下 JsonArray:

arr = [
      {
        "name": "test",
        "alias": "alias1",
        "type": 1
      },
      {
        "name": "test",
        "type": 0
      },
      {
        "name": "abc",
        "alias": "alias2",
        "type": 1
      }
    ]

我想使用變量值(可能包含別名/鍵)來查找。 所以基本上find第一個偏好應該是別名,如果沒有找到具有相同值的別名,那么它應該在 "name" 和 where "alias" is not present 中搜索

通常它會像這樣:

_.find(arr, {
 alias: value 
})

但我希望代碼返回 obj where name = value ,如果 alias=value 沒有找到

1) 例如:value = "alias1" 預期==>

{
    "name": "test",
    "alias": "alias1",
    "type": 1
  }

2)例如:值=“測試”預期==>

{
        "name": "test",
        "type": 0
      }

您需要使用 find ( _.find()Array.find() )來查找alias匹配,如果沒有找到,請再次使用 find 來查找name匹配:

 const findAliasOrName = (value, arr) => _.find(arr, { alias: value }) || _.find(arr, { name: value }); const arr = [{"name":"test","type":0},{"name":"test","alias":"alias1","type":1},{"name":"abc","alias":"alias2","type":1}] console.log(findAliasOrName('alias1', arr)); console.log(findAliasOrName('test', arr));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

你可以這樣做:

如果別名鍵在 obj 中可用,則將值與別名匹配,否則使用三元運算符將值與名稱鍵匹配

 var arr = [ { "name": "test", "alias": "alias1", "type": 1 }, { "name": "test", "type": 0 }, { "name": "abc", "alias": "alias2", "type": 1 } ]; const findValue = (arr, value) => { return _.find(arr, (elem) => { return elem.alias ? elem.alias === value : elem.name === value; }); } console.log(findValue(arr, 'alias1')); console.log(findValue(arr, 'test'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

您需要采用自定義回調,該回調采用兩個可能的屬性來檢查值。

 function find(array, value) { return _.find(array, o => o.alias === value || o.name === value) } var array = [{ name: "abc", alias: "abc_alias", type: 1 }, { name: "tofind", type: 2 }, { name: "def", alias: "al1", type: 3 }]; console.log(find(array, 'abc_alias')); console.log(find(array, 'tofind'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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