Điều gì đã xảy ra với Lodash _.pluck?


273

Tôi đã từng sử dụng Lodash _.pluck... Tôi thích nhổ ...

Nhận ra Lodash không còn hỗ trợ pluck(kể từ Lodash 4.x), tôi đang cố gắng nhớ những gì nên sử dụng thay thế ...

Tôi đã đi đến các tài liệu , nhấn cmd-f, gõ 'nhổ', nhưng người bạn bị bỏ rơi đáng thương của tôi thậm chí không được đề cập đúng ... thậm chí không được thay thế bởi '...

Ai đó có thể vui lòng nhắc tôi những gì tôi nên sử dụng thay thế?



Câu trả lời:


411

À ha! The Changash Changelog nói lên tất cả ...

"Loại bỏ có _.plucklợi cho _.maptốc ký iteratee"

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
Họ có thể không chỉ đơn giản là giữ cả hai ...? Tôi không thấy cần phải đổi tên mọi thứ chỉ vì mục đích đổi tên chúng.
Kenny Worden

17
Tuy nhiên, đó không phải là "đổi tên" - bản đồ đã tồn tại - và việc nhổ lông đã bị xóa. Bản đồ chỉ xảy ra để cung cấp chức năng tương tự với cùng chữ ký đối số.
Chris

51
Tại sao địa ngục tôi muốn có hai chuông cửa nhà tôi? Nếu cả hai đều làm điều tương tự, hãy tha cho mọi người sự nhầm lẫn và thoát khỏi một. Theo tôi, đây là giá trị thay đổi phá vỡ. Loại bỏ rác thừa, đơn giản hóa API và mọi người có thể học cách sử dụng chuông cửa khác. Nó không giống như nó khó sử dụng hơn. Tôi muốn nhiều nhà phát triển sẽ loại bỏ cruft. +1 cho nhóm lodash vì đã giới thiệu sự thay đổi đột phá (thực sự không có sự mỉa mai nào ở đây).
Landon Poch

27
Loại bỏ nhổ lông chỉ cho funzies có nghĩa là không ai có thể cập nhật lodash một cách an toàn. Nó không giống như đây là một ngôn ngữ được biên dịch ... Thật khó chịu ...
Scott Stafford

8
@ScottStafford Đó là lý do tại sao nó được gọi là thay đổi đột phá . Nếu bạn không muốn đọc thay đổi khi các phiên bản chính thay đổi, thì đừng bận tâm cập nhật các phiên bản chính. Bạn có thể cập nhật một cách an toàn trong cùng một phiên bản chính.
oligofren

71

Không có nhu cầu _.maphoặc _.pluckvì ES6 đã cất cánh.

Đây là một thay thế bằng cách sử dụng ES6 JavaScript:

clips.map(clip => clip.id)


3
Không cần ES6 chẵn: Array.prototype.mapnằm trong tiêu chuẩn ES5.1. Xem hỗ trợ trình duyệt - nó sẽ quay trở lại xa như mọi người cần phải lo lắng trong năm 2017, rất có thể!
davnicwil

2
@davnicwil Array.prototype.maplà ES5.1, chắc chắn, nhưng cú pháp mũi tên dễ thương =>cho các chức năng ẩn danh thì không. ;)
00dani

3
@ 00Dani điểm tốt! Mắt tôi hoàn toàn bỏ qua mũi tên béo. À, clips.map(function (clip) { return clip.id })tôi đoán vẫn không tệ lắm ;-)
davnicwil

11
Bạn thực sự có thể làm cho nó ngắn hơn nếu sử dụng ES6clips.map(({id}) => id)
Dr.Pil

1
Điều này rất đúng nhưng thật hữu ích khi biết điều gì đã xảy ra _.pluckvì một số dự án ES6 trước có thể sử dụng các phương thức của lodashe. :)
csalmeida

18

Sử dụng _.mapthay vì _.pluck. Trong phiên bản mới nhất, nó _.pluckđã bị gỡ bỏ.


2

Nếu bạn thực sự muốn _.pluckhỗ trợ trở lại, bạn có thể sử dụng mixin:

const _ = require("lodash")

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

Bởi vì mapbây giờ hỗ trợ một chuỗi ("iterator") làm đối số thay vì hàm.


pluck! = map. Pluck cho phép bạn vượt qua trong một chuỗi và giống như chofunction (record) { return(record[that_string]) }
Brian Underwood

@BrianUnderwood Cảm ơn! Tôi sẽ nhắc lại: _.mapcó thể được sử dụng như một hàm tương đương nếu được sử dụng đúng cách.
Richie Bendall

-2

Hoặc thử phương pháp nonlodash thuần ES6 như thế này

const reducer = (array, object) => {
  array.push(object.a)
  return array
}

var objects = [{ 'a': 1 }, { 'a': 2 }];
objects.reduce(reducer, [])

Điều này là phức tạp không cần thiết, khi bạn có thể làm objects.map(object => object.a).
jkjustjos Breath
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.