如何在Javascript中检查映射中是否存在值?

如何在Javascript中检查映射中是否存在值?,javascript,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)){

这个问题看起来很简单,但我哪儿也没找到

如何知道映射中是否存在值

例如:

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;
    }
}
A=[1,2,3,5,6,7]
var myMap=newmap();
for(设i=0;i

我想检查,给定一个值,这个值是否在散列中。与“hasValue”类似。

使用
Map.has(z)
,如中所述,您可以在映射上使用迭代,查找值并在找到它后立即返回true(退出循环)。或者,如果元素不存在,则返回false。比如:

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

一、 个人更喜欢
find
indexOf
findIndex

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


除了通过搜索,您不能:

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=[1,2,3,5,6,7]
var myValues=新集合(A);
for(设z=1;z

当然,考虑到您的
A
已经排序,您可以直接对其进行迭代,以找到最低的缺失值。

我知道这个问题已经得到了回答,但我想指出一种方法,无需(明确地)迭代条目。你能行

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;
    }
}
对我来说,它是有效的:

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

OP希望检查a值是否在映射中,而不希望检查是否设置了键。我不想知道钥匙是否在上面。但是价值。我知道我可以得到地图的Object.values,并给出一个Array.find,但是我觉得不太好,看起来你使用了错误的数据结构。改用a<代码>var mySet=新集合(A)@4castle为什么要使用Set help?@BUG如果你看他们的代码,他们的映射只是创建它的数组的逻辑再现。他们需要将值作为关键。当然,但我想这只是一个更复杂问题的简化示例。如果不是,当然你是对的。
for(让v of map.values())
如果它被排序,你不应该迭代,你应该对它进行二进制搜索-它会快得多。@VitaliyLebedev不,我的意思是在这里迭代,因为代码在寻找数组中不存在的最小整数。二进制搜索没有帮助,因为我们不知道要查找哪个值-您只需要像在合并中一样迭代整数和数组,直到找到缺少的值。
Object.values(myMap).includes(myValue);