javascript - 在 map 中删除不删除作为对象的键

标签 javascript ecmascript-6

我创建了一个 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/

相关文章:

javascript - 使用 "map"函数返回多个数组

javascript - 如何使用 javascript/jQuery 从数组中删除元素?

javascript - 通过访问器为函数传递标志——它是哪种 JavaScript 模式?

javascript - 在下拉菜单angularjs中设置ng-model中的列表项

javascript - Ignite UI 导出大型数据集暂停页面

javascript - Bootstrap 多选搜索问题

javascript - 在 Lodash 中根据条件合并两个 JSON 数组

javascript - 在 es6 中查找我的树级宽度算法中的错误

javascript - 如何将 React.DOM 元素转换为 JSX?

javascript - 如何正确访问模块内的类属性和函数