Що сталося з Лодашем _.pluck?


273

Я колись використовував Лодаш _.pluck... Я любив плун ...

Зрозумівши, Lodash більше не підтримує pluck(як для Lodash 4.x), я намагаюся згадати, що використовувати замість цього ...

Я пішов у документи , натиснув cmd-f, набрав "пласка", але моєму бідному покинутому другові навіть не належним чином згадати ... навіть "не було замінено" ...

Може хтось, будь ласка, нагадає мені, що я повинен використовувати замість цього?



Відповіді:


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
Чи не могли вони просто утримати обох ...? Я не бачу необхідності перейменовувати речі лише заради перейменування.
— Кенні Worden

17
Хоча це не "перейменування" - карта вже існувала - і планку просто видалили. Map так само надає аналогічні функції з тим же підписом аргументу.
— Кріс

51
Чому, чортве, я хотів би два дзвони на своєму будинку? Якщо вони обидва роблять одне і те ж, шкодуйте людей від плутанини і позбудьтесь одного. На мою думку, це варте того, щоб змінити вагу. Позбудьтесь зайвих мотлохів, спростіть API, і люди можуть навчитися користуватися іншим дзвоном у двері. Це не так, як це важче використовувати. Я хотів би, щоб більше розробників видалили сурові. +1 команді лодашів за те, щоб запровадити переломну зміну (насправді тут немає сарказму).
— Ландон Поч

27
Видалення плуга тільки для funzies означає, що ніхто ніколи не може безпечно оновлювати lodash. Це не так, як це складена мова ... Так дратує ...
— Скотт Стаффорд

8
@ScottStafford Ось чому це називається переломною зміною. Якщо ви не переймаєтесь читанням журналу змін, коли змінюються основні версії, тоді не турбуйтеся оновленням основних версій. Ви можете безпечно оновлюватись у межах тієї самої основної версії.
— олігофрен

71

Немає потреби в тому, _.mapабо _.pluckз моменту зняття ES6.

Ось альтернатива за допомогою ES6 JavaScript:

clips.map(clip => clip.id)


3
Не потрібно навіть ES6: Array.prototype.mapвходить до стандарту 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, могли використовувати методи lodashe. :)
— csalmeida

18

Використовуйте _.mapзамість _.pluck. В останній версії _.pluckфайл було видалено.


2

Якщо вам дуже потрібна _.pluckпідтримка, ви можете використовувати mixin:

const _ = require("lodash")

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

Тому що mapтепер підтримує рядок ("ітератор") як аргумент замість функції.


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

@BrianUnderwood Дякую! Я ще раз зазначу: _.mapможе бути використаний як функціональний еквівалент при правильному використанні.
— Річі Бендалл

-2

Або спробуйте чистий метод 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).
— jkjustjoshing
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.