Lodash _.pluck怎么了?


273

我曾经用过Lodash _.pluck...我喜欢拔毛...

实现Lodash不再支持 pluck(从Lodash 4.x版本开始),我正在努力记住要使用什么代替...

我去了文档,按cmd-f,键入“ pluck”,但是我可怜的被抛弃的朋友甚至都没有得到应有的提法……甚至没有被“取代”。

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



Answers:


411

啊哈!该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]

110
他们不能简单地将两者都保留吗?我认为不必为了重命名而重命名。
肯尼·沃登

17
不过,这不是“重新命名”-地图已经存在-摘录只是被删除了。映射恰好提供具有相同参数签名的相似功能。
克里斯

51
我为什么要在我的房子上放两个门铃?如果他们俩都做同样的事情,那就让人们避免困惑并摆脱它。我认为,这值得进行重大改变。摆脱多余的垃圾,简化API,人们可以学习使用其他门铃。并不是说它更难使用。我希望更多的开发人员能够消除麻烦。向lodash小组+1以介绍重大变化(实际上,这里没有讽刺意味)。
Landon Poch '16

27
删除仅用于功能的采摘意味着没有人可以安全地更新lodash。并不是说这是一种编译语言……真烦人……
Scott Stafford

8
@ScottStafford这就是为什么它被称为重大变化。如果在主要版本发生更改时不花时间去阅读变更日志,那么就不必更新主要版本。您可以在同一主要版本中安全地进行更新。
oligofren

71

不需要_.map_.pluck自从ES6诞生以来。

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

clips.map(clip => clip.id)


3
甚至不需要ES6:Array.prototype.map在ES5.1标准中。查看浏览器支持 -它可以追溯到2017年任何人需要担心的地方!
davnicwil

2
@davnicwil当然Array.prototype.map是ES5.1,但是=>匿名函数的可爱箭头语法不是。;)
00dani

3
@ 00Dani好点!我的眼睛完全跳过了粗箭头。嗯,clips.map(function (clip) { return clip.id })我想仍然还不错;-)
davnicwil

11
如果使用ES6,您实际上可以将其缩短clips.map(({id}) => id)
Dr.Pil

1
这是真的,但了解发生的情况很有用,_.pluck因为某些ES6之前的项目可能会使用lodashe的方法。:)
csalmeida


2

如果您确实需要_.pluck支持,可以使用mixin:

const _ = require("lodash")

_.mixin({
    pluck: _.map
})

因为map现在支持字符串(“迭代器”)作为参数而不是函数。


pluck!= map。Pluck让您传递一个字符串,就像给一个字符串一样function (record) { return(record[that_string]) }
Brian Underwood

@BrianUnderwood谢谢!我重申:_.map如果使用正确,可以用作功能等同物。
Richie Bendall

-2

或者尝试像这样的纯ES6 nonlodash方法

const reducer = (array, object) => {
  array.push(object.a)
  return array
}

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])

当您可以做到时,这不必要地复杂objects.map(object => object.a)
jkjustjoshing
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.