আপনি কীভাবে কোনও 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
)।