- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
JavaScript map有两种方法 get和 has .如果元素不存在,方法 get 返回 undefined 或者如果值 undefined 被添加到 map 。
所以如果我实现我的方法 GetAlways or such ,它将返回现有的或添加新的,如果不存在则返回,然后我坚持选择牺牲运行时性能进行双映射查找或牺牲 API 纯度将未定义等同于映射中不存在,从而有效地禁止安全添加未定义值到 map 。
有没有第三种高效纯粹的选择,类似TryGet from C# ?
不纯选择的代码:
Map.prototype.GetAlways = function(name){
let child = this.get(name);
if (child === undefined){ // equating undefined value to non-existence
child = {};
this.set(name, child);
}
return child;
}
慢速选择代码:
Map.prototype.GetAlways = function(name){
if(this.has(name)) // first map seek
return this.get(name); // second map seek
let child = {};
this.set(name, child);
return child;
}
最佳答案
undefined
表示缺少参数。唯一可以使用它的场合是检查参数是否丢失或函数是否返回任何内容。如果有人将 undefined 传递给您的 map ,发生的事情不是您的问题。
如果它困扰你,试着用 C++ 的思维方式来制作 JS:在你的文档中明确地写下你期望什么和你保证什么。这样您就不必浪费时间(和代码性能)测试那些错误的参数。这就是我们所说的关注点分离。
...所以我的答案是,不要试图允许在 map 中存储未定义的内容,但不要采取任何措施在代码中阻止它。忽略边缘情况并说不允许人们这样做。
关于javascript - JavaScript 映射 : TryGet wanted 中的双重搜索与未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033906/
我有一个枚举方法,如下所示: public static TEnum GetEnumByStringValue(string value) where TEnum : struct, IConvert
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
JavaScript map有两种方法 get和 has .如果元素不存在,方法 get 返回 undefined 或者如果值 undefined 被添加到 map 。 所以如果我实现我的方法 Get
在对 "How to implement List, Set, and Map in null free design?" 的评论中, Steven Sudit我开始讨论使用回调,处理“找到”和“未找
我是一名优秀的程序员,十分优秀!