Lodash _.pluck怎么了?

sfl*_*che 252 javascript lodash

我曾经用过Lodash _.pluck......我喜欢采摘...

实现Lodash不再支持pluck(从Lodash 4.x开始),我很难记住要使用的内容......

我去了文档,打了cmd-f,输入'pluck',但是我可怜的被遗弃的朋友甚至没有给出适当的提及......甚至没有'被'取代'......

有人可以提醒我,我应该使用什么?

sfl*_*che 385

啊,哈!该Lodash更新日志说,这一切...

"删除_.pluck赞成_.map使用iteratee速记"

var objects = [{ 'a': 1 }, { 'a': 2 }];

// in 3.10.1
_.pluck(objects, 'a'); // ? [1, 2]
_.map(objects, 'a'); // ? [1, 2]

// in 4.0.0
_.map(objects, 'a'); // ? [1, 2]
Run Code Online (Sandbox Code Playgroud)

  • 难道他们不能简单地保持两个......?我认为不需要为了重命名而重命名. (102认同)
  • 我为什么要在家里放两个门铃呢?如果他们都做同样的事情,那么就会让人感到困惑并摆脱困境.在我看来,这是值得改变的.摆脱额外的垃圾,简化API,人们可以学习使用其他门铃.它不是更难以使用.我希望更多的开发人员能够解决问题.+1给了lodash团队引入了突破性变化(这里没有讽刺,真的). (50认同)
  • 为了解决这个问题而去除拔毛意味着没有人可以安全地更新lodash.这不是一个编译语言......太烦人了...... (26认同)
  • 它不是"重命名" - 地图已经存在 - 并且简单地删除了采摘.Map恰好提供了具有相同参数签名的类似功能. (16认同)
  • @ScottStafford这就是为什么它被称为_breaking_变化.如果您在主要版本更改时不打扰阅读更改日志,则不要费心更新主要版本.您可以在同一主要版本中安全地更新. (4认同)
  • @oligofren现在在实践中应用该主体:你有200k行使用3.x lodash的javascript代码.你不能永远留在3.x:建议/帮助/新库开始使用4.x语法.新人们来看看最新的文档然后陷入困境,没有意识到并且不关心3.x和4.x. 但是你要面对这个:https://github.com/lodash/lodash/wiki/Changelog.你是做什么?你如何将变更日志变成你必须采取的行动(可能很大?)?所以我得到了彻底改变,但不仅仅是需要!这不是必需的.完全没有. (4认同)
  • 用`_.pluck = _.map;`摆脱这个.他们破坏兼容性而不包括像这样的别名是荒谬的.16个字符(-12 bzipped). (4认同)
  • 我还认为在语义上将此函数命名为"pluck"更有意义.通常,在我遇到过的语言中,您将使用map函数对给定数组中的每个元素执行操作.但是,你可以使用pluck(例如Laravel Collection方法)从嵌套数组中提取元素. (4认同)
  • @LandonPoch,更像是,你必须重新连接你的整个房子,因为你的门铃停止工作,需要更换.不推荐使用的功能应该逐步淘汰.请注意,尽管转移到`_.forEach`,`_.each`仍然有效 (3认同)
  • @ScottStafford 这很容易;你*不*查看整个列表。你看_一个条目_:4.0.0版本。那是 3.x 的单一破坏版本。浏览 5 秒后,我找到了已删除的方法。所有库都以这种方式工作。如果您升级主要版本,**预计**会出现严重的 API 不兼容性。 (3认同)
  • 是的,不需要删除!他们应该只是拾取地图来返回地图!(双关语) (2认同)
  • @oligofren 好的。v4.0.0 的“兼容性警告”部分有四英尺长。因此,即使您可以如此快速地找到已删除的方法,我认为您甚至需要一段时间才能对所有四英尺的更改采取行动,以评估然后在大型遗留代码库中实现任何所需的更改。现在,有什么好处值得这样做呢?`_.pluck` 有什么问题吗? (2认同)
  • @ScottStafford所以...在每个图书馆永远保存一切?我真的不明白你的期望.开发必须向前发展,开发人员需要删除不必要的代码,否则他们必须维护它.正确地说,lodash团队决定维持两个几乎相同的功能是不值得的. (2认同)
  • 每当我需要弹拨时,总是需要回到该线程,因为我永远不记得“ iteratee速记”的名称:) (2认同)
  • 来吧...用`_.map`查找/替换`_.pluck`非常容易 (2认同)

Mic*_*ins 60

没有必要_.map_.pluck因为ES6已经起飞.

这是使用ES6 JavaScript的替代方案:

clips.map(clip => clip.id)

  • 如果使用ES6`clocks.map(({id})=> id)`,你实际上可以缩短它 (9认同)
  • 甚至不需要ES6:`Array.prototype.map`符合ES5.1标准.请参阅[浏览器支持](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility) - 它可以追溯到2017年任何人都需要担心,大多数大概! (3认同)
  • @ 00Dani好点!我的眼睛完全跳过了胖箭.好吧,`clips.map(function(clip){return clip.id})`我还是不是那么糟糕;-) (3认同)
  • @davnicwil`Array.prototype.map`是ES5.1,但是匿名函数的可爱箭头语法'=>`不是。;) (2认同)

小智 13

_.map而不是_.pluck.在最新版本中_.pluck已被删除.