เกิดอะไรขึ้นกับ Lodash _.pluck?


273

ฉันเคยใช้ Lodash _.pluck... ฉันชอบถอนขน ...

การตระหนักถึง Lodash ไม่รองรับอีกต่อไปpluck(ตั้งแต่ Lodash 4.x) ฉันกำลังพยายามจดจำว่าจะใช้อะไรแทน ...

ฉันไปที่ docsกด cmd-f พิมพ์ 'pluck' แต่เพื่อนที่ถูกทอดทิ้งที่ยากจนของฉันไม่ได้รับการกล่าวถึงอย่างถูกต้อง ... ไม่แม้แต่ 'ถูกแทนที่ด้วย' ...

ใครช่วยกรุณาเตือนฉันว่าฉันควรจะใช้แทน



คำตอบ:


411

อ๋อ! Lodash การเปลี่ยนแปลงกล่าวมันทั้งหมด ...

"นำออกแล้ว_.pluckในความโปรดปรานของ_.mapกับ 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
พวกเขาไม่สามารถเก็บทั้ง ... ฉันไม่เห็นความจำเป็นในการเปลี่ยนชื่อสิ่งต่าง ๆ เพียงเพื่อการเปลี่ยนชื่อพวกเขา
Kenny Worden

17
มันไม่ใช่ "การเปลี่ยนชื่อ" แม้ว่า - มีแผนที่อยู่แล้ว - และถอนได้อย่างง่ายดาย แผนที่เกิดขึ้นเพื่อให้การทำงานที่คล้ายกันมีลายเซ็นอาร์กิวเมนต์เดียวกัน
คริส

51
ทำไมนรกฉันต้องการสองออดในบ้านของฉัน? หากพวกเขาทั้งสองทำสิ่งเดียวกันจงทำให้คนสับสนและกำจัดอย่างใดอย่างหนึ่ง ในความคิดของฉันมันคุ้มค่ากับการเปลี่ยนแปลง กำจัดขยะพิเศษทำให้ API ง่ายขึ้นและผู้คนสามารถเรียนรู้การใช้ออดอื่น ๆ ไม่ใช่ว่ามันใช้ยากกว่า ฉันหวังว่านักพัฒนามากขึ้นจะลบ cruft +1 ถึงทีมงานบ้านพักสำหรับการแนะนำการเปลี่ยนแปลงที่เกิดขึ้นจริง (ไม่มีการเสียดสีที่นี่จริง ๆ )
Landon Poch

27
การถอนถอนออกเพียงเพื่อ funzies หมายความว่าไม่มีใครสามารถอัปเดต lodash ได้อย่างปลอดภัย มันไม่เหมือนนี้เป็นภาษาที่รวบรวม ... น่ารำคาญมาก ...
สกอตต์สตาฟฟอร์ด

8
@ScottStafford ที่ว่าทำไมมันเรียกว่าทำลายการเปลี่ยนแปลง หากคุณไม่รำคาญที่จะอ่านการเปลี่ยนแปลงเมื่อมีการเปลี่ยนแปลงรุ่นใหญ่ ๆ อย่ากังวลกับการอัปเดตเวอร์ชันหลัก คุณสามารถอัปเดตอย่างปลอดภัยภายในเวอร์ชันหลักเดียวกัน
oligofren

71

ไม่จำเป็นสำหรับ_.mapหรือ_.pluckเนื่องจาก ES6 ได้ถอดออก

นี่เป็นทางเลือกโดยใช้ ES6 JavaScript:

clips.map(clip => clip.id)


3
ไม่จำเป็นต้องใช้ ES6 แม้แต่: Array.prototype.mapอยู่ในมาตรฐาน ES5.1 ดูการสนับสนุนเบราว์เซอร์ - มันกลับไปไกลเท่าที่ใคร ๆ ก็ต้องกังวลในปี 2560 อาจเป็นไปได้!
davnicwil

2
@davnicwil Array.prototype.mapคือ ES5.1 แน่นอน แต่ไวยากรณ์ลูกศรน่ารัก=>สำหรับฟังก์ชั่นที่ไม่ระบุชื่อนั้นไม่ใช่ ;)
00dani

3
@ 00Dani จุดดี! ดวงตาของฉันกระโดดข้ามลูกศรอ้วนอย่างสมบูรณ์ อ่า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ตอนนี้รองรับสตริง ("iterator") เป็นอาร์กิวเมนต์แทนฟังก์ชั่น


pluck! map= ถอนช่วยให้คุณผ่านสายและเป็นเช่นเดียวกับการให้function (record) { return(record[that_string]) }
Brian Underwood

@BrianUnderwood ขอบคุณ! ฉันจะย้ำ: _.mapสามารถใช้เป็นฟังก์ชันการทำงานที่เท่าเทียมกันหากใช้อย่างถูกต้อง
Richie Bendall

-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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.