Що сталося з Лодашем _.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.