Что случилось с Lodash _.pluck?


273

Я когда-то использовал Lodash _.pluck... Я любил срывать ...

Понимая, что Lodash больше не поддерживает pluck(начиная с Lodash 4.x), я пытаюсь вспомнить, что использовать вместо этого ...

Я пошел в документы , нажал cmd-f, набрал «pluck», но моему бедному оставленному другу даже не дали должного упоминания ... даже «не было заменено» ...

Может кто-нибудь напомнить мне, что я должен использовать вместо этого?



Ответы:


411

Ах-ха! В журнале изменений Lodash все сказано ...

"Удалено _.pluckв пользу _.mapсокращенного сокращения"

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
Это не "переименование", хотя - карта уже существовала - и просто убрали. Оказывается, что Map обеспечивает аналогичную функциональность с той же сигнатурой аргумента.
Крис

51
Какого черта я хочу два дверных звонка в моем доме? Если они оба делают одно и то же, избавьте людей от путаницы и избавьтесь от них. На мой взгляд, это стоит переломных изменений. Избавьтесь от лишнего мусора, упростите API, и люди смогут научиться пользоваться другим дверным звонком. Это не так сложно использовать. Я хотел бы, чтобы больше разработчиков убрало излишки. +1 команде lodash за внесение критических изменений (на самом деле здесь нет сарказма).
Лэндон Поч

27
Удаление pluck просто для забавы означает, что никто не сможет безопасно обновить lodash. Это не так, как это скомпилированный язык ... Так раздражает ...
Скотт Стаффорд

8
@ScottStafford Вот почему это называется нарушением изменений. Если вам не нужно читать журнал изменений при смене основных версий, не обновляйте основные версии. Вы можете безопасно обновить в той же основной версии.
oligofren

71

Нет необходимости _.mapили _.pluckс тех пор, как взлетела ES6.

Вот альтернатива с использованием ES6 JavaScript:

clips.map(clip => clip.id)


3
Нет необходимости даже Array.prototype.mapв ES6: это стандарт ES5.1. Обратитесь к поддержке браузера - это похоже на то, о чем нужно беспокоиться в 2017 году, скорее всего!
davnicwil

2
@davnicwil Array.prototype.map- это ES5.1, конечно, но синтаксис симпатичной стрелки =>для анонимных функций - нет. ;)
00день

3
@ 00Дани хорошая мысль! Мои глаза полностью пропустили жирную стрелу. Ах, ну, clips.map(function (clip) { return clip.id })я думаю , все еще не так плохо ;-)
davnicwil

11
Вы можете сделать его короче, если используете ES6clips.map(({id}) => id)
Dr.Pil

1
Это очень верно, но полезно знать, что произошло, _.pluckпоскольку некоторые проекты до ES6 могли использовать методы Лодаше. :)
csalmeida


2

Если вы действительно хотите _.pluckвернуть поддержку, вы можете использовать миксин:

const _ = require("lodash")

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

Потому что mapтеперь поддерживает строку («итератор») в качестве аргумента вместо функции.


pluck! = map. Pluck позволяет вам передать в строку и так же, как даватьfunction (record) { return(record[that_string]) }
Брайан Андервуд

@BrianUnderwood Спасибо! Я повторю: _.mapможно использовать как функциональный эквивалент, если использовать правильно.
Ричи Бендалл

-2

Или попробуйте чистый метод ESL 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.