Bagaimana Anda mengkloning objek ES6 Map atau Set ?
Saya ingin mendapatkan Peta atau Kumpulan baru yang memiliki kunci dan nilai yang sama.
Jawaban:
Gunakan konstruktor untuk mengkloning Maps dan Set:
var clonedMap = new Map(originalMap)
var clonedSet = new Set(originalSet)
Map
harus diperlakukan sebagai tipe data abstrak, bukan sebagai objek Javascript. Karenanya kloning yang dalam Map
tidak masuk akal.
Membuat Set baru melalui perulangan for lebih cepat daripada konstruktor Set. Hal yang sama berlaku untuk Maps, meskipun pada tingkat yang lebih rendah.
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
(meskipun tidak untuk Map
).