【问题标题】:LoDash: Get an array of values from an array of object propertiesLoDash:从对象属性数组中获取值数组
【发布时间】:2015-04-05 22:38:25
【问题描述】:

我确定它在 LoDash 文档中的某个地方,但我似乎找不到正确的组合。

var users = [{
      id: 12,
      name: 'Adam'
   },{
      id: 14,
      name: 'Bob'
   },{
      id: 16,
      name: 'Charlie'
   },{
      id: 18,
      name: 'David'
   }
]

// how do I get [12, 14, 16, 18]
var userIds = _.map(users, _.pick('id'));

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    从 v4.x 版本开始你应该使用_.map:

    _.map(users, 'id'); // [12, 14, 16, 18]
    

    这种方式对应于您将编写的本机 Array.prototype.map 方法(ES2015 语法):

    users.map(user => user.id); // [12, 14, 16, 18]
    

    在 v4.x 之前,您可以以同样的方式使用 _.pluck

    _.pluck(users, 'id'); // [12, 14, 16, 18]
    

    【讨论】:

    • 感谢比_.toArray(_.mapValues(users, 'id'))好得多
    • 如何获取带有 id 的名称,我的意思是我们如何获取两个以上的值?
    • @John users.map(({ id, name }) => ({ id, name })) 或不那么神秘的users.map(user => ({ id: user.id, name: user.name }))。在 lodash 中相同:_.map(users, ({ id, name }) => ({ id, name })).
    • @dfsq,将对象添加到输出数组中是一个很好的解决方案。谢谢!
    【解决方案2】:

    纯JS:

    var userIds = users.map( function(obj) { return obj.id; } );
    

    【讨论】:

    • 您可以将其简化为 var userIds = users.map( obj => obj.id );
    • 达到我的水平users.map(({id})=>id)
    【解决方案3】:

    在新的 lodash 版本 v4.0.0 中,_.pluck 已被删除以支持 _.map

    那么你可以使用这个:

    _.map(users, 'id'); // [12, 14, 16, 18]
    

    你可以在Github Changelog看到

    【讨论】:

      【解决方案4】:

      如果你需要从每个对象中提取多个属性,那么

      let newArr = _.map(arr, o => _.pick(o, ['name', 'surname', 'rate']));
      

      【讨论】:

      • 你好,有没有lodash的方法来实现这个?
      【解决方案5】:

      通过 ES6 获得它的简单甚至更快的方法

      let newArray = users.flatMap(i => i.ID) // -> [ 12, 13, 14, 15 ]
      

      【讨论】:

      • 为什么是flatMap() 而不是map()
      • @Lacek map() 用于对象操作,其中 flatMap() 仅用于将您的 Array 软化为单个数组
      • 我知道map()flatMap() 的不同之处。只是想知道为什么你在这种情况下建议flatMap(),而map() 已经有答案。如果您能详细说明我们何时应该使用flatMap() 而不是map(),那就太好了。
      • @Lacek 因为在某些情况下对于从数组中获取所需的基本数据非常有用。有用的链接developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      【解决方案6】:

      const users = [{
            id: 12,
            name: 'Adam'
         },{
            id: 14,
            name: 'Bob'
         },{
            id: 16,
            name: 'Charlie'
         },{
            id: 18,
            name: 'David'
         }
      ]
      const userIds = _.values(users);
      console.log(userIds); //[12, 14, 16, 18]

      【讨论】:

      • OP 只想要 id。您的代码不会打印出 id,而是打印出整个对象。
      【解决方案7】:

      如果您使用的是原生 javascript,那么您可以使用此代码 -

      let ids = users.map(function(obj, index) {
      
          return obj.id;
      })
      
      console.log(ids); //[12, 14, 16, 18]
      

      【讨论】:

      • OP 明确要求 Lodash 解决方案。
      【解决方案8】:

      这将在弹出窗口中为您提供所需的内容。

      for(var i = 0; i < users.Count; i++){
         alert(users[i].id);  
      }
      

      【讨论】:

      • 循环遍历数组,一次一个元素。数组是索引的数据结构,其中包含来自某种数据类型的值(在此示例中为对象)。只能通过评估数组索引中的元素来访问对象。循环就是实现这一点的结构。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多