我创建了一个 map 对象
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 ,据说 key 可以是任何类型。那么这里发生了什么以及删除 key 的正确方法是什么?
这就是 es-6 中定义删除过程的方式
最佳答案
最简单的方法是将对象引用存储到一个变量。
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; }
关于javascript - 在 map 中删除不删除作为对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215562/