Что случилось с 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.