如何在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);