找到字符串中出现字符的频率时,此语法的确切含义是什么?

时间:2018-12-28 11:24:36

标签: javascript string object

查找字符串中出现字符的频率时,此语法的确切含义是什么?

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));

3 个答案:

答案 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
}