आप एक ES6 मानचित्र या सेट ऑब्जेक्ट को उथले-क्लोन कैसे करते हैं ?
मैं एक नया नक्शा या सेट प्राप्त करना चाहता हूं जिसमें समान कुंजी और मूल्य हैं।
जवाबों:
मैप और सेट को क्लोन करने के लिए कंस्ट्रक्टर का उपयोग करें:
var clonedMap = new Map(originalMap)
var clonedSet = new Set(originalSet)
Map
एक अमूर्त डेटा प्रकार के रूप में व्यवहार किया जाना चाहिए, एक जावास्क्रिप्ट वस्तु के रूप में नहीं। इसलिए गहरी क्लोनिंग का कोई Map
मतलब नहीं है।
लूप के माध्यम से एक नया सेट बनाना सेट कंस्ट्रक्टर की तुलना में तेज़ है। मैप्स के लिए भी यही सच है, हालांकि कुछ हद तक।
const timeInLoop = (desc, loopCount, fn) => {
const d = `${desc}: ${loopCount.toExponential()}`
console.time(d)
for (let i = 0; i < loopCount; i++) {
fn()
}
console.timeEnd(d)
}
const set = new Set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
const setFromForLoop = x => {
const y = new Set()
for (const item of x) y.add(item)
return y
}
const map = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
const mapFromForLoop = x => {
const y = new Map()
for (const entry of x) y.set(...entry)
return y
}
timeInLoop('new Set(set)', 1e5, () => new Set(set))
timeInLoop('setFromForLoop(set)', 1e5, () => setFromForLoop(set))
timeInLoop('new Map(map)', 1e5, () => new Map(map))
timeInLoop('mapFromForLoop(map)', 1e5, () => mapFromForLoop(map))
Set
(हालांकि के लिए नहीं Map
) के लिए एक ही मुद्दा प्रदर्शित करता है ।