在地图中删除而不是删除对象键

时间:2019-01-16 10:58:33

标签: javascript ecmascript-6

我已经创建了一个地图对象

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

中定义删除过程的方式

2 个答案:

答案 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);