查找字符串中出现字符的频率时,此语法的确切含义是什么?
var str = 'abcccdddd';
function maxCharCount(target) {
const chars = {};
let maxChar = '';
let maxValue = 1;
for (let char of target) {
chars[char] = chars[char] + 1 || 1; //what is the meaning of this line exactly in detail???
}
return chars;
}
console.log(maxCharCount(str));
答案 0 :(得分:2)
chars[char] + 1 || 1
有两个方面:左侧和右侧。如果左一个解析为假值,那么整个表达式将解析到右侧,如果左一个解析为真,则表达式将解析到左侧。
也就是说,在一种情况下,左侧只能是虚假的:当chars[char]
为undefined
时(当chars
不包含名称为char
的属性时)。 undefined + 1
给出NaN
,即不是数字,这是一个虚假的值。
这样的代码绝对应该被认为是不好的,因为它使开发人员的意图不明显。相反,至少应该这样:
chars[char] = chars[char] ? chars[char] + 1 : 1;
答案 1 :(得分:1)
如果char是obj char,那么它将加1,否则将计数添加到值为1的对象中。
答案 2 :(得分:1)
完整代码和说明:
function maxCharCount(target) {
const chars = {};
let maxChar = '';
let maxValue = 1;
for (let char of target) {
chars[char] = chars[char] + 1 || 1;
}
return chars;
}
console.log(maxCharCount(str));
如果chars
是对象,则代码将转到chars
内名为char
等于的属性。如果该属性存在,它将以1递增。如果不存在,它将被创建并设置为1。
该函数本身的作用是接收一个字符串,并返回一个包含字符串中每个字符的字符计数的对象-因此,如果我们传递字符串hello
,则输出应为:
{
"h": 1,
"e": 1,
"l": 2,
"o": 1
}