Что означает этот синтаксис именно при нахождении частоты появления символов в строке? - PullRequest
0 голосов
/ 28 декабря 2018

Что означает этот синтаксис именно при нахождении частоты появления символов в строке?

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 голосов
/ 28 декабря 2018

chars[char] + 1 || 1 имеет две стороны: левую и правую.Если левое значение разрешается в ложное значение, тогда все выражение разрешается в правую сторону, а если левое разрешается в правдивое, выражение разрешается в левую сторону.

Тем не менее, левая сторона может толькобыть ложным в одном случае: когда chars[char] равно undefined (когда chars не содержит свойства с именем char).И undefined + 1 дает NaN, т. Е. Не число, что является ложным значением.

Код, подобный этому, определенно следует считать плохим, поскольку он делает намерение разработчика не очевидным.Вместо этого предпочтительнее что-то подобное:

chars[char] = chars[char] ? chars[char] + 1 : 1;
0 голосов
/ 28 декабря 2018

Полный код и описание:

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
}
0 голосов
/ 28 декабря 2018

Если char находится в obj chars, он будет иметь значение + 1, иначе он добавит char к объекту со значением 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...