首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在地图中删除不删除属于对象的关键字

在地图中删除不删除属于对象的关键字
EN

Stack Overflow用户
提问于 2019-01-16 18:58:33
回答 2查看 842关注 0票数 3

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

代码语言:javascript
复制
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中定义删除过程的方式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-16 19:08:50

最简单的方法是将对象引用存储到一个变量中。

代码语言:javascript
复制
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]);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果你只有对象的一部分,那么你需要通过比较对象来找到这个对象。

代码语言:javascript
复制
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]);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2019-01-16 19:02:56

这里的问题是,当调用map_obj.delete({'a':2, 'b':3})时,您使用一个新对象调用它。尝试:

代码语言:javascript
复制
var map_obj = new Map();
x = {'a':2, 'b':3};
map_obj.set(x, {'c': 4});
//...
map_obj.delete(x);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54215562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档