假设我想在不重新创建 map 的情况下删除 map 的前 100 个条目,并且还以最有效的方式执行此操作。
假设您有一个 500 件商品 ES6 Map Object :
let map = new Map(... 500 items)
目前我是这样做的:
const newCache = new Map(
Array.from(map).slice(100)
)
map.clear()
map = newCache
但这会重新创建 map 。
另一种方法是遍历前 100 个键:
Array.from(map.keys())
.slice(0, 100)
.forEach(key => map.delete(key))
但是看起来效率很低。
最佳答案
获取 Map 的前 100 个键的数组,然后删除它们。
var keys = Array.from(map.keys()).slice(0, 100);
keys.forEach(k => map.delete(k));
或者您可以使用循环,这样您就不需要创建要切片的数组。
var i = 0;
for (var k of map.keys()) {
if (i++ > 100) {
break;
}
map.delete(k);
}
我创建了一个 jsperf用你的两种方法和这个循环进行测试。循环是最有效的,比切片键快 5 倍。
关于javascript - 如何在不重新创建 map 的情况下从 ES6 map 对象中删除前 N 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730750/