检查地图键类型js

时间:2018-08-09 15:06:55

标签: javascript

我正在尝试检查地图密钥类型,以确定我应该如何对其进行过滤。我当前的方法是令人惊讶地检查myMap.keys().next().value似乎是undefined,而不管它是否是字符串,int等。

我需要检查键是整数还是空。到目前为止,我已经尝试过:

!key.next().value // for no key
Number.isInteger(key.next().value) // for a numbered key

这些检查都不会触发我的if语句。

3 个答案:

答案 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);