这看起来很简单,但我没有在任何地方找到它。
我如何知道地图中是否存在某个值?
例如:
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”
答案 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)
我个人更喜欢find
,indexOf
和findIndex
。
const array1 = (map, val) => {
var foo;
array2.find( (x) => foo = x === foo.id )
return foo;
}
答案 5 :(得分:-2)
按照MDN
中的说明使用Map.has(z)