繁体   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