उथला-क्लोन एक ES6 मानचित्र या सेट


99

आप एक ES6 मानचित्र या सेट ऑब्जेक्ट को उथले-क्लोन कैसे करते हैं ?

मैं एक नया नक्शा या सेट प्राप्त करना चाहता हूं जिसमें समान कुंजी और मूल्य हैं।

जवाबों:


202

मैप और सेट को क्लोन करने के लिए कंस्ट्रक्टर का उपयोग करें:

var clonedMap = new Map(originalMap)

var clonedSet = new Set(originalSet)

3
गहरा क्लोन कैसे करें?
BILL

3
इस फिडेल को देखें कि कैसे एक नक्शे को गहरा करने के लिए देखें: jsfiddle.net/pahund/5qtt2Len/1
पैट्रिक हंड

5
Mapएक अमूर्त डेटा प्रकार के रूप में व्यवहार किया जाना चाहिए, एक जावास्क्रिप्ट वस्तु के रूप में नहीं। इसलिए गहरी क्लोनिंग का कोई Mapमतलब नहीं है।

5
दुर्भाग्य से कॉपी कंस्ट्रक्टर IE 11 में काम नहीं करता है (खाली नक्शा बनाया गया है)।
जन मोलनार

4

लूप के माध्यम से एक नया सेट बनाना सेट कंस्ट्रक्टर की तुलना में तेज़ है। मैप्स के लिए भी यही सच है, हालांकि कुछ हद तक।

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) के लिए एक ही मुद्दा प्रदर्शित करता है ।
जो लिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.