【问题标题】:Using "in" keyword with maps in JS在 JS 中使用“in”关键字和地图
【发布时间】:2021-03-14 19:40:47
【问题描述】:
let hMap = new Map();
    
    for(let i = 0; i < nums.length; i++){
        let diff = target - nums[i];
        
        if(diff in hMap)
           return [hMap[diff], i];
        hMap[nums[i]] = i;
    }

if(diff in hMap) 是如何工作的?我尝试用 hMap.has(diff) 替换它,但没有奏效。

【问题讨论】:

  • 该代码使用 Map 实例完全错误 - 它可以使用任何对象。看来作者不知道他们在做什么。

标签: javascript hashmap


【解决方案1】:

映射是一种特殊的对象,对象可以有任意的键值对与之关联。在这里,hMap 被使用作为普通对象的功能 - (对象属性)键与值的关联。它没有被用作Map,因此代码令人困惑是可以理解的。

如果是这样的话,代码也可以正常工作(并且会更有意义):

let hMap = {};

此时,应该很容易理解发生了什么:hMap[nums[i]] = i; 在对象上设置一个属性,diff in hMap 检查该属性是否存在于对象上。

如果想在这个练习中使用 Maps,那么只有在使用 Map 方法来获取和设置值时才合适,这与普通对象的方法完全不同:

if (hMap.has(diff)) {
  return [hMap.get(diff), i];
}
hMap.set(nums[i]), i;

您不能使用in 来检查地图是否有属性(由Map.set 设置) - 您只能使用Map.has

同样,您不能使用has 来检查地图或其他表达式(或其他任何内容)是否具有由expression[prop] = someValue 设置的属性 - 要查找这样的prop,您必须使用in

【讨论】:

  • 我现在完全明白了。谢谢你的解释。这清除了它。谢谢。
  • 当一个答案解决了您的问题时,您可以考虑投票和/或将其标记为已接受(选中左侧的复选框)以表明问题已解决:)
【解决方案2】:

设置和获取地图条目时出错。

要使用键添加值,您需要调用方法

Map.set(key, value);

要通过键从 Map 中获取值,您需要调用方法

var value = Map.get(key);

你的sn-p代码可以是这样的:

let hMap = new Map();
    
for(let i = 0; i < nums.length; i++){
    let diff = target - nums[i];
        
    if(hMap.has(diff)) return [hMap.get(diff), i];

    hMap.set(nums[i]) = i;
}

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 2020-12-10
    • 2022-01-22
    • 1970-01-01
    • 2014-04-24
    • 2018-04-08
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多