Javascript ES6映射键为字符串或数字
我有一张ES6地图,钥匙是数字。有时键是数字,有时键是表示数字的字符串。对于我来说,地图在运行时永远不会有重复的密钥。示例I将永远不会有键“1”和1 当从map中检索时,我需要一个简单的单行代码,它将否定键是字符串还是数字Javascript ES6映射键为字符串或数字,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一张ES6地图,钥匙是数字。有时键是数字,有时键是表示数字的字符串。对于我来说,地图在运行时永远不会有重复的密钥。示例I将永远不会有键“1”和1 当从map中检索时,我需要一个简单的单行代码,它将否定键是字符串还是数字 var map = new Map(); undefined map.set('1', 'string one'); map.set(2, 'number tow') Map(2) {"1" => "string one", 2 => "number tow"}
var map = new Map();
undefined
map.set('1', 'string one');
map.set(2, 'number tow')
Map(2) {"1" => "string one", 2 => "number tow"}
map.get(1)
undefined
map.get('1')
"string one"
我已经创建了一个从给定映射中获取值的函数。它以两种方式工作,从字符串到int,从int到字符串
var-map=newmap();
map.set('1','stringone');
地图集(2,'第二');
函数getFromMap(映射,键){
返回map.get(key)| | map.get(key.toString())| | map.get(parseInt(key));
}
log(getFromMap(map,1));
log(getFromMap(map,'2'))代码>我创建了一个从给定映射中获取值的函数。它以两种方式工作,从字符串到int,从int到字符串
var-map=newmap();
map.set('1','stringone');
地图集(2,'第二');
函数getFromMap(映射,键){
返回map.get(key)| | map.get(key.toString())| | map.get(parseInt(key));
}
log(getFromMap(map,1));
log(getFromMap(map,'2'))代码>您可以只使用没有原型的对象。对于访问,密钥转换为字符串
var-map=Object.create(null);
map['1']='stringone';
地图[2]=“第二号”;
console.log(映射[1]);/'串起
console.log(映射['1']);/'串起
控制台日志(map)代码>您可以只使用没有原型的对象。对于访问,密钥转换为字符串
var-map=Object.create(null);
map['1']='stringone';
地图[2]=“第二号”;
console.log(映射[1]);/'串起
console.log(映射['1']);/'串起
控制台日志(map)代码>对于初学者,我建议你清理你的钥匙(例如只使用字符串或数字),这样你的生活会更轻松
如果仍然坚持使用这两种类型的键,则可以创建如下包装函数:
function getFromMap(map, key){
var stringKey = key.toString();
var integerKey = parseInt(key);
return map.get(stringKey) || map.get(integerKey);
}
作为旁注:
在您的情况下,似乎可以轻松使用普通对象(使用括号指定对象将自动将数字转换为字符串):
为了进一步了解使用贴图与对象的优缺点,我们邀请您阅读以下内容。对于初学者,我建议您对按键进行消毒(例如仅使用字符串或数字),这样您的生活会更轻松
如果仍然坚持使用这两种类型的键,则可以创建如下包装函数:
function getFromMap(map, key){
var stringKey = key.toString();
var integerKey = parseInt(key);
return map.get(stringKey) || map.get(integerKey);
}
作为旁注:
在您的情况下,似乎可以轻松使用普通对象(使用括号指定对象将自动将数字转换为字符串):
为了进一步了解使用地图与对象的优缺点,我们邀请您阅读以下内容。请添加一个问题。您最好重新思考您的方法,坚持使用数字或字符串。为什么不使用对象?所有的键都转换成字符串。我同意@NinaScholz的观点,如果你永远不会同时拥有1
和'1'
,那么使用地图是没有意义的。请添加一个问题。你最好重新思考你的方法,坚持使用数字或字符串。为什么不使用对象?所有键都转换为字符串。我同意@NinaScholz的观点,如果你永远不会同时拥有1
和'1'
,那么使用Map
是没有意义的。这会给Map的每次搜索增加很多复杂性,并且可能会大大降低脚本的速度,因为你是(在最坏的情况下)搜索地图3次以找到单个值…正确,Nina Scholz的答案比这更好。这会给地图的每次搜索增加很多复杂性,并且可能会大大降低脚本速度,因为您(在最坏的情况下)正在搜索地图3次以找到单个值…正确,尼娜·斯科尔斯的答案是比这更好的解决方案。