একটি ES6 মানচিত্র বা সেট অগভীর-ক্লোন করুন


99

আপনি কীভাবে কোনও ES6 মানচিত্র বা সেট অবজেক্টটি অগভীর-ক্লোন করবেন ?

আমি একটি নতুন মানচিত্র বা সেট পেতে চাই যাতে একই কী এবং মান রয়েছে।

উত্তর:


203

মানচিত্র এবং সেটগুলি ক্লোন করতে কনস্ট্রাক্টর ব্যবহার করুন:

var clonedMap = new Map(originalMap)

var clonedSet = new Set(originalSet)

4
গভীর ক্লোন কীভাবে করবেন?
বিল

4
কীভাবে মানচিত্রকে গভীরভাবে ক্লোন করতে হবে তা জানতে এই ভাঁড়টিটি দেখুন
প্যাট্রিক হুন্ড

4
Mapজাভাস্ক্রিপ্ট অবজেক্ট হিসাবে নয়, একটি বিমূর্ত ডেটা ধরণের হিসাবে বিবেচনা করা উচিত। অতএব গভীর ক্লোনিংয়ের কোনও অর্থ Mapহয় না।

4
দুর্ভাগ্যক্রমে অনুলিপি নির্মাণকারী 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)।
জো লিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.