क्या हुआ लोदश _.pluck को?


273

मैंने एक बार लॉडश का इस्तेमाल किया था _.pluck... मुझे प्यार था ...

लोडश को अब समर्थन नहीं मिलता है pluck(लोडश 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
क्या वे बस दोनों को नहीं रख सकते थे ...? मैं चीजों का नाम बदलने के लिए सिर्फ उनका नाम बदलने की जरूरत नहीं देखता।
केनी वर्डेन

17
यह "नामकरण" नहीं है, हालांकि - नक्शा पहले से मौजूद था - और प्लक को बस हटा दिया गया था। मानचित्र समान तर्क हस्ताक्षर के साथ समान कार्यक्षमता प्रदान करने के लिए होता है।
क्रिस

51
मुझे अपने घर पर दो दरवाजे क्यों चाहिए? यदि वे दोनों एक ही काम करते हैं, तो लोगों को भ्रम से दूर करें और एक से छुटकारा पाएं। मेरी राय में, यह परिवर्तन के लायक है। अतिरिक्त कबाड़ से छुटकारा पाएं, एपीआई को सरल बनाएं, और लोग दूसरे दरवाजे का उपयोग करना सीख सकते हैं। यह उपयोग करने के लिए किसी भी कठिन की तरह नहीं है। मैं चाहता हूं कि अधिक डेवलपर्स क्रुट को हटा दें। ब्रेकिंग परिवर्तन (यहां कोई व्यंग्य नहीं, वास्तव में) को पेश करने के लिए लॉज टीम को +1।
लैंडन पोच

27
सिर्फ फन्जियों के लिए प्लक हटाने का मतलब है कि कोई भी कभी भी सुरक्षित रूप से अपडेट नहीं कर सकता है। ऐसा नहीं है कि यह एक संकलित भाषा है ... इतना कष्टप्रद ...
स्कॉट स्टैफ़ोर्ड

8
@ScottStafford इसीलिए इसे ब्रेकिंग चेंज कहा जाता है । यदि आप बड़े संस्करणों में परिवर्तन करते समय चैंज को पढ़ने से परेशान नहीं होते हैं, तो प्रमुख संस्करणों को अपडेट करने से परेशान न हों। आप उसी प्रमुख संस्करण में सुरक्षित रूप से अपडेट कर सकते हैं।
ऑलिगॉफ्रेन 15

71

ईएस 6 के हटने के बाद से _.mapया _.pluckउसके लिए कोई आवश्यकता नहीं है।

यहाँ ES6 जावास्क्रिप्ट का उपयोग कर एक विकल्प है:

clips.map(clip => clip.id)


3
ES6 के लिए भी कोई ज़रूरत नहीं है: Array.prototype.mapES5.1 मानक में है। ब्राउज़र समर्थन देखें - यह वापस जाता है जहां तक ​​2017 में किसी को भी चिंता करने की ज़रूरत है, शायद!
davnicwil

2
@davnicwil ES5.1 Array.prototype.mapहै, निश्चित है, लेकिन =>अनाम कार्यों के लिए प्यारा तीर वाक्यविन्यास नहीं है। ;)
00dani

3
@ 00Dani अच्छा बिंदु! मेरी आँखें पूरी तरह से मोटे तीर पर फिसल गईं। आह ठीक है, clips.map(function (clip) { return clip.id })अभी भी इतना बुरा नहीं है मुझे लगता है ;-)
davnicwil

11
यदि आप ES6clips.map(({id}) => id)
DrPil

1
यह बहुत सही है, लेकिन यह जानना उपयोगी है कि _.pluckकुछ पूर्व ES6 परियोजनाओं के साथ क्या हुआ, हो सकता है कि वे लाशे के तरीकों का उपयोग कर सकें। :)
csalmeida


2

यदि आप वास्तव में _.pluckसमर्थन वापस चाहते हैं, तो आप एक मिश्रण का उपयोग कर सकते हैं:

const _ = require("lodash")

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

क्योंकि mapअब फ़ंक्शन के बजाय एक स्ट्रिंग ("पुनरावृत्त") को एक तर्क के रूप में समर्थन करता है।


pluck! = map। प्लक आपको एक स्ट्रिंग में पास करने देता है और देने के समान हैfunction (record) { return(record[that_string]) }
ब्रायन अंडरवुड

@BrianUnderwood धन्यवाद! मैं _.mapदोहराऊंगा: यदि सही ढंग से उपयोग किया जाए तो एक कार्यात्मक समतुल्य के रूप में उपयोग किया जा सकता है।
रिची बेंडल

-2

या इस तरह शुद्ध ईएस 6 नॉनलोडैश विधि की कोशिश करें

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.