我在这里得到了预期的结果。
var modeObj = {};
array.forEach(num => {
if (!modeObj[num])
modeObj[num] = 0;
modeObj[num]++;
});
我在这里得到一个空的结果。
var modeObj = {};
array.forEach(num => {
if (!modeObj[num]) {
modeObj[num] = 0;
}else {
modeObj[num]++;
}
});
上面的代码与下面的代码有何不同?我在 if 条件中缺少一些概念。
当你有if/else
时 - 只有当if
的值为 false 时,才会计算else
块内的行。
在您的第一个示例中 - 无论 if 是否有效,第二行每次都会运行。
如果没有括号 - 仅计算下一行(if
之后)。
您的第一个示例实际上如下:
var modeObj = {};
array.forEach(num => {
if (!modeObj[num]) {
modeObj[num] = 0;
}
modeObj[num]++;
});
如您所见 - 每次都会评估modeObj[num]++;
(不仅当if
为真时)。
第一个代码 if 条件没有{}
。因此,无论 if 条件的结果如何,都只执行第一行,并且执行行modeObj[num]++;
。
在第二个代码中,您添加了 else。
你在条件和第二个代码片段之外if
增加了modeObj[num]++
。它应该是这样的:
var modeObj = {};
array.forEach(num => {
if (!modeObj[num]) {
modeObj[num] = 0;
modeObj[num]++;
} else {
// do something
}
});