【问题标题】:Lodash / Javascript - how to find unique keys nested inside objectsLodash / Javascript - 如何找到嵌套在对象内的唯一键
【发布时间】:2017-05-21 16:02:42
【问题描述】:

我正在尝试处理一个大型数据对象,比如表单:

{
 data1: {
     keyA: 'AValue',
     keyB: 'BValue',
     id: 'UniqueID1'
   },
 data2: {
     keyA: 'AValue',
     keyB: 'BValue',
     id: 'UniqueID2'
   },
 data3: {
     keyA: 'AValue',
     keyB: 'BValue',
     id: 'UniqueID1'
   },
 data4: {
     keyA: 'AValue',
     keyB: 'BValue',
     id: 'UniqueID2'
   }
}

有没有一种方法可以通过这个对象并将“id”的唯一值返回给我?例如,我想最终得到这些值

UniqueID1, UniqueID2,

无论是在数组中还是在对象中,都没有关系。 对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript ecmascript-6 lodash


    【解决方案1】:

    您可以使用纯 js 执行此操作,在 Object.keys()Set 上使用 map() 以返回唯一键数组。

    var data = {"data1":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data2":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"},"data3":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data4":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"}}
    
    var uniq = [...new Set(Object.keys(data).map(e => data[e].id))]
    console.log(uniq)

    或者使用 Lodash,您可以使用 map,然后使用 uniq

    var data = {"data1":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data2":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"},"data3":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data4":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"}}
    
    var uniq = _.uniq(_.map(data, 'id'))
    console.log(uniq)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

    【讨论】:

    • @NenadVracar 你可以删除_.values(),它仍然可以工作
    • @ryeballar 谢谢。
    【解决方案2】:

    你可以在没有 lodash 的情况下使用 Array.reduce 和 Set 来做到这一点

    const uniques = Object.keys(data).reduce((acc,key) => acc.add(data[key].id), new Set())
    console.log(uniques)
    

    【讨论】:

      【解决方案3】:

      既然你标记了 lodash,你可以这样做 as array:

      var myArray = [
       {
           keyA: 'AValue',
           keyB: 'BValue',
           id: 'UniqueID1'
       },
       {
           keyA: 'AValue',
           keyB: 'BValue',
           id: 'UniqueID2'
       },
       {
           keyA: 'AValue',
           keyB: 'BValue',
           id: 'UniqueID1'
       },
       {
           keyA: 'AValue',
           keyB: 'BValue',
           id: 'UniqueID2'
         }
      ];
      
      _.map(myArray, 'id');
      

      here 是文档

      【讨论】:

      • 是的,谢谢,并且可以链接“_.values(data)”来创建数组。
      猜你喜欢
      • 2014-11-25
      • 1970-01-01
      • 2020-01-22
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多