如何在Javascript上检查MAP中是否存在VALUE?

时间:2018-04-28 13:35:04

标签: javascript

这看起来很简单,但我没有在任何地方找到它。

我如何知道地图中是否存在某个值?

例如:

A = [1,2,3,5,6,7]
var myMap = new Map();
    for (let i = 0; i < A.length; i++) {
        myMap.set(i,A[i]);
    }
    for (let z = 1; z < Number.MAX_SAFE_INTEGER; z++) {
        console.log(z);
        if(!myMap.hasValue(z)){
            return z;
        }
    }

我想检查,给定一个值,此值是否在Hash上。就像“hasValue”

6 个答案:

答案 0 :(得分:4)

您可以在地图上使用迭代,查找值并在找到后立即返回true(退出循环)。如果元素不存在,则返回false。类似的东西:

const findInMap = (map, val) => {
  for (let [k, v] of map) {
    if (v === val) { 
      return true; 
    }
  }  
  return false;
}

答案 1 :(得分:2)

除了搜索之外,你不能这样做:

Array.from(myMap.values()).includes(val)

使用适当的数据结构,就像一组所有值:

A = [1,2,3,5,6,7]
var myValues = new Set(A);

for (let z = 1; z < Number.MAX_SAFE_INTEGER; z++) {
    console.log(z);
    if(!myValues.has(z)) {
        return z;
    }
}

当然,鉴于您的A已经排序,您可以直接迭代它以找到最低的缺失值。

答案 2 :(得分:1)

对我来说它有效:

Object.values(myMap).includes(myValue);

答案 3 :(得分:0)

我知道这个问题已经回答了,但是我想指出一种方法,而不必(明确地)重复这些条目。你可以做

let myMap = new Map([[0, 1], [1, 2], [2, 3], [3, 5], [4, 6], [5, 7]])

for (let z = 1; z < Number.MAX_SAFE_INTEGER; ++z) {
    console.log(z);
    if([...myMap.values()].includes(z) === false){
        return z;
    }
}

因此,您可以创建一个函数

const mapContainsElement = (map, val) => [...map.values()].includes(v)

答案 4 :(得分:-1)

我个人更喜欢findindexOffindIndex

const array1 = (map, val) => {
  var foo;
  array2.find( (x) => foo = x === foo.id )
  return foo;
}

findIndex

find

indexOf

答案 5 :(得分:-2)

按照MDN

中的说明使用Map.has(z)