Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6映射键为字符串或数字_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript ES6映射键为字符串或数字

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"}

我有一张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"}
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次以找到单个值…正确,尼娜·斯科尔斯的答案是比这更好的解决方案。