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

273

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

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

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

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

sfletche
источник
lodash.com/docs#pick
Даниэль А. Уайт,
lodash.com/docs#result
Даниэль А. Уайт

Ответы:

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]
sfletche
источник
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
18

Используйте _.mapвместо _.pluck. В последней версии _.pluckбыл удален.

Дирадж Налаваде
источник
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, [])
PayteR
источник
Это излишне сложно, когда ты можешь это сделать objects.map(object => object.a).
jkjustjoshing