为什么我需要 else 语句来检查 Javascript 对象中的键?

问题描述 投票:0回答:1

我正在做Leetcode第49题。.

我输入了这个,但它不起作用。

var groupAnagrams = function(strs) {
    if(strs.length <= 1){
        return [strs]
    }

    const hashMap = {}

    for(let i = 0;i < strs.length;i++){
        const currentKey = strs[i].split('').sort().join('')

        if(hashMap[currentKey]){
            hashMap[currentKey].push(strs[i])
        }

        hashMap[currentKey] = [strs[i]]
    }

    return Object.values(hashMap)
};

然后我问ChatGPT,它要求我把它放在else语句中

var groupAnagrams = function(strs) {
    if(strs.length <= 1){
        return [strs]
    }

    const hashMap = {}

    for(let i = 0;i < strs.length;i++){
        const currentKey = strs[i].split('').sort().join('')

        if(hashMap[currentKey]){
            hashMap[currentKey].push(strs[i])
        } else {
            hashMap[currentKey] = [strs[i]]
        }
    }

    return Object.values(hashMap)
};

它有效,我不明白,为什么它需要在 else 语句中?是因为我什么都没退回吗?我以为如果不满足条件,事件循环会跳过 if 语句中的命令?

感谢您的回复!

javascript hashmap
1个回答
0
投票

您的原始代码在每个迭代周期错误地用

hashMap[currentKey]
覆盖
[strs[i]]
值。正确使用
else
appends 下一个
strs[i]
else 创建已填充第一个
strs[i]
值的数组。

if (hashMap[currentKey]) {
  // Push strs[i] into existing array
  hashMap[currentKey].push(strs[i]);
} else {
  // Create new array reference and place strs[i] as first element
  hashMap[currentKey] = [strs[i]];
}

有时你会看到一个“否定”检查,首先为密钥创建数组,然后无条件推入数组。

// No array value for key, create empty array
if (!hashMap[currentKey]) {
  hashMap[currentKey] = [];
}

// Push current strs[i] into array
hashMap[currentKey].push(strs[i]);
© www.soinside.com 2019 - 2024. All rights reserved.