【问题标题】:Lodash map and return uniqueLodash映射并返回唯一
【发布时间】:2016-05-17 12:52:16
【问题描述】:

我有一个 lodash 变量;

var usernames = _.map(data, 'usernames');

产生以下内容;

[
    "joebloggs",
    "joebloggs",
    "simongarfunkel",
    "chrispine",
    "billgates",
    "billgates"
]

如何调整 lodash 语句使其只返回唯一值数组?例如

var username = _.map(data, 'usernames').uniq();

【问题讨论】:

  • 你试过uniqBy吗? _.uniqBy(data, 'username')
  • 我希望数据能让我做到这一点……但这次我做不到。

标签: javascript node.js lodash


【解决方案1】:

有很多方法,但uniq() 不是数组上的方法,而是 lodash 方法。

_.uniq(_.map(data, 'usernames'))

或者:

_.chain(data).map('usernames').uniq().value()

(第二个未经测试,可能是错误的,但很接近。)

如评论中所述,根据您的数据实际,您可以一次性完成所有操作,而无需先提取usernames 的任何内容。

【讨论】:

  • 谢谢,虽然我提到了一些 lodash 特定的东西。我知道 uniq() 是 lodash。
  • @KarlBateman 对,但是您正试图在数组上调用 lodash 方法。这不是 lodash 的工作方式。它不会修改原型。
  • 谢谢你,更简洁的_(data).map('usernames').uniq().value();
【解决方案2】:

您还可以使用uniqBy 函数,该函数还接受为数组中的每个元素调用的 iteratee。它接受如下两个参数,其中 id 是 iteratee 参数。

_.uniqBy(array, 'id')

【讨论】:

  • 您需要多一步:_.map(_.uniqBy(array, 'id'), 'id')(如果重复的数量很大且对象很小,这种方法可能比接受的答案更高效,因为中间数组会更短)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2016-02-24
  • 2011-03-03
相关资源
最近更新 更多