我正在尝试检查地图密钥类型,以确定我应该如何对其进行过滤。我当前的方法是令人惊讶地检查myMap.keys().next().value
似乎是undefined
,而不管它是否是字符串,int等。
我需要检查键是整数还是空。到目前为止,我已经尝试过:
!key.next().value // for no key
Number.isInteger(key.next().value) // for a numbered key
这些检查都不会触发我的if语句。
答案 0 :(得分:3)
Number.isInteger仅在参数为数字时验证。 如果您验证Number.isInteger(“ 1”)始终将返回false。 验证一个键是否为数字,请尝试使用正则表达式,例如:
/^\d+$/.test(key.next().value)
在两种情况下都可以正常工作 /^\d+$/.test("1“) 和 / ^ \ d + $ /。test(1)
答案 1 :(得分:1)
在使用方法链接时,这是一个非常常见的错误。 map.keys()
返回一个迭代器,next()
调用在该迭代器上进行迭代。只需将myMap.keys()返回值保存在变量中,然后调用next()。value进行检查。代码看起来像这样:
let myMap = new Map()
myMap.set("0", "zero")
myMap.set(1, "one")
let iterator = myMap.keys()
console.log(typeof iterator.next().value)
console.log(typeof iterator.next().value)
以上代码段按预期工作,但请尝试运行以下代码段。它将两个控制台语句都打印为 string
let myMap = new Map()
myMap.set("0", "zero")
myMap.set(1, "one")
console.log(typeof myMap.keys().next().value)
console.log(typeof myMap.keys().next().value)
答案 2 :(得分:0)
我假设您有一个Map对象,并且想根据正确的Type键过滤值?
您应该使用typeof知道var类型:
var test = "2"
console.log(typeof 42);
// expected output: "number"
console.log(typeof 'blubber');
// expected output: "string"
console.log(typeof true);
// expected output: "boolean"
console.log(typeof declaredButUndefinedVariable);
// expected output: "undefined";
您可以执行以下操作
var myMap = new Map([[undefined, "fffff"],["2", "uno"], [2, "doios"]]);
for (const key of myMap.keys()) {
if(typeof key === 'string'){
myMap.delete(key);
}
}
console.log(myMap)
另一种方法将地图转换为数组,然后继续过滤结果:
var myMap = new Map([[undefined, "fffff"],["2", "uno"], [2, "doios"]]);
var _typeofKey = 'string'; // you can set typeof key: number , string , boolean , symbol , undefined , object , function
var results = Array.from(a).filter(
function(element){
var key = element[0];
var value = element[1];
if(typeof key === _typeofKey){
return true;
}
return false;
}
)
// new Map without string keys
var newMap = myMap(results);