Мне нужна помощь, чтобы выяснить, почему я получаю NaN в этой функции - PullRequest
0 голосов
/ 06 июля 2018

function multipleLetterCount(str){
  var finalObj = {};
  for(var i = 0; i < str.length; i++){
    if(!str[i] in finalObj){
        finalObj[str[i]] = 1;
    } else {
        finalObj[str[i]]++;
    }
}
return finalObj;
}

console.log(multipleLetterCount("SomeWord"));

Мне нужна помощь, чтобы выяснить, почему значения появляются как NaN. Спасибо

Ответы [ 4 ]

0 голосов
/ 06 июля 2018

Как насчет?

let string = 'SomeWord';

const result = string.split('').reduce((a, b) => {
  a[b] ? a[b]++ : a[b] = 1
  return a;
}, {});
console.log(result);
0 голосов
/ 06 июля 2018

Вы можете упростить свой код следующим образом

function multipleLetterCount(str){
var finalObj = {};
for(var i = 0; i < str.length; i++){
     if (finalObj[str[i]]) {
    	finalObj[str[i]]++;
     } else {
    	finalObj[str[i]] = 1;
     }
}
return finalObj;
}

console.log(multipleLetterCount("SomeWord"));
0 голосов
/ 06 июля 2018

Обратите внимание, что существует множество способов решения проблемы, все из которых зависят от того, насколько надежной должна быть ваша функция.

Для простоты вместо if(!str[i] in finalObj) сделайте if (!(str[i] in finalObj)).

0 голосов
/ 06 июля 2018

почему значения появляются как NaN

str[i] представляет разные символы в каждой итерации. Когда вы отрицаете этот символ, например !str[i], он становится false. Следовательно, условие (if(false in finalObj)) всегда false и выполняет только часть else. На данный момент finalObj[str[i]] является undefined. Наконец, увеличение undefined (undefined++) дает вам NaN.

Попробуйте с Object.prototype.hasOwnProperty(), который возвращает логическое значение, указывающее, имеет ли объект указанное свойство как собственное свойство:

function multipleLetterCount(str){
  var finalObj = {};
  for(var i = 0; i < str.length; i++){
    if(!finalObj.hasOwnProperty(str[i])){
        finalObj[str[i]] = 1;
    } else {
        finalObj[str[i]]++;
    }
  }
  return finalObj;
}

console.log(multipleLetterCount("SomeWord"));
...