Lodash _.pluck 怎么了?

IT技术 javascript lodash
2021-03-17 18:45:05

我曾经使用过 Lodash _.pluck......我喜欢pluck ......

意识到 Lodash 不再支持pluck(从 Lodash 4.x 开始),我很难记住要使用什么来代替......

我去了文档,按 cmd-f,输入“pluck”,但我可怜的被遗弃的朋友甚至没有得到适当的提及……甚至没有一个“已被替换”……

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

6个回答

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

“删除_.pluck以支持_.mapiteratee 速记”

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]
@ScottStafford 这就是为什么它被称为突破性变化的原因。如果您在主要版本更改时不费心阅读变更日志,那么请不要费心更新主要版本。您可以安全地在同一主要版本中进行更新。
2021-04-23 18:45:05
我为什么要在我的房子上放两个门铃?如果他们都做同样的事情,请不要让人们感到困惑并摆脱一个。在我看来,这是值得的突破性改变。摆脱多余的垃圾,简化 API,人们可以学习使用其他门铃。并不是说它更难使用。我希望更多的开发者能够移除 cruft。+1 向 lodash 团队介绍了重大更改(这里真的没有讽刺)。
2021-05-02 18:45:05
虽然它不是“重命名” - 地图已经存在 - 并且只是简单地删除了 pluck。Map 恰好提供了具有相同参数签名的类似功能。
2021-05-08 18:45:05
删除 pluck 只是为了好玩意味着没有人可以安全地更新 lodash。这不像是一种编译语言……太烦人了……
2021-05-08 18:45:05
他们不能简单地保留两个......?我认为没有必要仅仅为了重命名而重命名它们。
2021-05-19 18:45:05

不需要_.map_.pluck因为 ES6 已经起飞。

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

clips.map(clip => clip.id)

@davnicwilArray.prototype.map是 ES5.1,当然,但=>匿名函数的可爱箭头语法不是。;)
2021-04-20 18:45:05
@00Dani 好点!我的眼睛完全跳过了肥箭头。嗯,clips.map(function (clip) { return clip.id })我想还不错;-)
2021-04-21 18:45:05
如果使用 ES6,您实际上可以缩短它 clips.map(({id}) => id)
2021-05-14 18:45:05
甚至不需要 ES6:Array.prototype.map在 ES5.1 标准中。查看浏览器支持- 它可以追溯到 2017 年任何人需要担心的范围,很可能!
2021-05-16 18:45:05
这是非常正确的,但了解发生了什么是很有用的,_.pluck因为一些 ES6 之前的项目可能会使用 lodashe 的方法。:)
2021-05-18 18:45:05

使用_.map代替_.pluck在最新版本_.pluck中已删除。

如果你真的想要_.pluck支持,你可以使用 mixin:

const _ = require("lodash")

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

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

@BrianUnderwood 谢谢!我会重申:_.map如果使用得当,可以用作功能等价物。
2021-04-20 18:45:05
pluck!= map. Pluck 允许您传入一个字符串,与给予相同function (record) { return(record[that_string]) }
2021-05-04 18:45:05

对于采摘单个或多个属性:

_.mixin({
    properties: (paths) =>
            (obj) => paths.reduce((memo, path) => [...memo, obj[path]], []),
    pluck: (obj, ...keys) => _.map(obj, _.flatten(keys).length > 1
                                    ? _.properties(_.flatten(keys))
                                    : (o) => o[keys[0]])
})
var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];

// underscore compatible usage
_.pluck(stooges, 'name');
=> ["moe", "larry", "curly"]

// multiple property usage
_.pluck(stooges, 'name', 'age')
=> [["moe",40], ["larry",50], ["curly",60]]

// alternate usage
_.pluck(stooges, ['name', 'age']) 
=> [["moe",40], ["larry",50], ["curly",60]]