在查找字符串中出现的字符频率时,这种语法的含义是什么?

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

在查找字符串中出现的字符频率时,这种语法的含义是什么?

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));
javascript string object
3个回答
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
}

2
投票

chars[char] + 1 || 1有两个方面:左和右。如果左边一个解析为假值,则整个表达式解析到右侧,如果左解析为真,则表达式解析到左侧。

也就是说,在一种情况下左侧只能是假的:当chars[char]undefined时(当chars不包含名为char的属性时)。并且undefined + 1给出NaN,即不是数字,这是一个虚假值。

像这样的代码应该被认为是坏的,因为它使开发人员的意图不明显。相反,至少应该喜欢这样的东西:

chars[char] = chars[char] ? chars[char] + 1 : 1;

1
投票

如果char在obj chars中,则它将为+ 1计数,否则它将向对象添加值为1的char。

© www.soinside.com 2019 - 2024. All rights reserved.