【发布时间】:2016-05-10 05:52:48
【问题描述】:
我曾经使用过 Lodash _.pluck...我喜欢 pluck...
意识到 Lodash 不再支持 pluck(从 Lodash 4.x 开始),我正在努力记住要改用什么...
我去了the docs,按了cmd-f,输入了“pluck”,但我可怜的被遗弃的朋友甚至没有得到适当的提及……甚至没有一个“已被替换”……
有人可以提醒我应该改用什么吗?
【问题讨论】:
标签: javascript lodash
我曾经使用过 Lodash _.pluck...我喜欢 pluck...
意识到 Lodash 不再支持 pluck(从 Lodash 4.x 开始),我正在努力记住要改用什么...
我去了the docs,按了cmd-f,输入了“pluck”,但我可怜的被遗弃的朋友甚至没有得到适当的提及……甚至没有一个“已被替换”……
有人可以提醒我应该改用什么吗?
【问题讨论】:
标签: javascript lodash
啊哈! Lodash Changelog 说明了一切......
“删除 _.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]
【讨论】:
由于 ES6 已经起飞,不再需要 _.map 或 _.pluck。
这是使用 ES6 JavaScript 的替代方法:
clips.map(clip => clip.id)
【讨论】:
Array.prototype.map 在 ES5.1 标准中。请参阅browser support - 它很可能可以追溯到 2017 年任何人需要担心的问题!
Array.prototype.map 是 ES5.1,当然,但用于匿名函数的可爱箭头语法 => 不是。 ;)
clips.map(function (clip) { return clip.id }) 还不错;-)
clips.map(({id}) => id),实际上可以缩短它
_.pluck 发生了什么很有用,因为一些 ES6 之前的项目可能会使用 lodashe 的方法。 :)
使用_.map 代替_.pluck。在最新版本中,_.pluck 已被删除。
【讨论】:
如果你真的想要 _.pluck 支持回来,你可以使用 mixin:
const _ = require("lodash")
_.mixin({
pluck: _.map
})
因为map 现在支持将字符串(“迭代器”)作为参数而不是函数。
【讨论】:
pluck != map。 Pluck 让你传入一个字符串,和给function (record) { return(record[that_string]) } 一样
_.map 如果使用得当,可以用作功能等价物。
对于提取单个或多个属性:
_.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]]
【讨论】:
或者尝试像这样的纯 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)。