我已经创建了一个地图对象
var map_obj = new Map();
map_obj.set({'a':2, 'b':3}, {'c': 4});
现在,当我尝试使用.delete
运算符
map_obj.delete({'a':2, 'b':3})
它向我显示false,并且不会删除键和值。可能是正在检查对象引用并创建新对象,因此找不到相等的对象。 在MDN guide中,据说密钥可以是任何类型。那么,这里发生了什么,删除密钥的正确方法是什么?
这是在es-6
中定义删除过程的方式答案 0 :(得分:2)
简单的方法是将对象引用存储到变量中。
var map_obj = new Map(),
object = { a: 2, b: 3 };
map_obj.set(object, {'c': 4});
console.log([...map_obj]);
map_obj.delete(object);
console.log([...map_obj]);
.as-console-wrapper { max-height: 100% !important; top: 0; }
如果对象只有一部分,则需要通过比较对象来找到该对象。
var map_obj = new Map(),
a = 2, b = 3,
key;
map_obj.set({ a: 2, b: 3 }, {'c': 4});
console.log([...map_obj]);
key = Array.from(map_obj.keys()).find(o => o.a === a && o.b === b);
map_obj.delete(key);
console.log([...map_obj]);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这里的问题是,在调用map_obj.delete({'a':2, 'b':3})
时,您使用一个新的Object进行调用。试试:
var map_obj = new Map();
x = {'a':2, 'b':3};
map_obj.set(x, {'c': 4});
//...
map_obj.delete(x);