为何调用map.delete()无法删除Map条目?返回false问题排查
问题原因分析:Map.delete()无法删除目标条目
你遇到的核心问题是混淆了Map集合的API操作和普通对象的属性操作,具体细节如下:
错误的操作方式
你虽然声明了new Map()创建了Map实例,但后续用map[num]赋值、用num in map判断的方式,本质是在给Map这个对象本身添加普通属性,而不是往Map内置的键值对集合里添加条目。控制台输出的含义
看你打印的Map(0) { '1': 3, '2': 2, '3': 1, '4': 3 },其中Map(0)明确表示Map内部的键值对数量是0,后面的'1':3等是Map对象的自有属性,不属于Map的键值对集合。delete()方法的作用范围
Map的delete()方法只能删除其内置键值对集合中的条目,无法操作对象的普通属性。所以调用map.delete(1)时,Map集合里根本没有键为1的条目,自然返回false,而对象属性'1'不会被影响。
正确的写法示例
要操作Map的键值对,必须使用Map专属的API:
let nums = [1,1,1,2,2,3] let map = new Map(); for (let num of nums) { // 用has()判断键是否存在于Map集合中 if (map.has(num)) { // 用get()获取值,set()更新值 map.set(num, map.get(num) + 1); } else { // 用set()添加新的键值对 map.set(num, 1); } } console.log(map); // Map(3) { 1 => 3, 2 => 2, 3 => 1 } console.log(map.delete(1)); // true console.log(map); // Map(2) { 2 => 2, 3 => 1 }
内容的提问来源于stack exchange,提问作者Jawwad Rizvi
相关产品推荐
相关产品推荐

