2017-02-15 14 views
0

Я пытаюсь подсчитать, сколько раз появляются уникальные символы в строке. , но я застрял на объект итерации, где он только не возвращает 1, независимо от того, сколько раз же появляется символ больше, чем один раз:Javascript Object Iteration with for loop

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split([, ]); 
 
    wordArray.forEach(function(c) { 
 
    wordObj[c] = +1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

Выход: {B: 1, и: 1, б: 1, л: 1, е: 1}, но ожидаемое значение ключа "б" должно быть равно 2.

+0

Что такое начальное значение 'wordObj [с]'? Что происходит, когда вы назначаете ему «+ 1»? – RobG

ответ

4

Вы писали:

wordObj[c]=+1; 

С сома е форматирование:

wordObj[c] = +1; 

Вы всегда привязывать +1 к значению, нет прироста здесь. Попробуйте

wordObj[c] = (wordObj[c] || 0)+1; 

И

var wordArray = word.split([, ]); 

должна быть достаточно

var wordArray = word.split(""); 

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split(""); 
 
    wordArray.forEach(function(c) { 
 
    wordObj[c] = (wordObj[c] || 0) +1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

0

Это копилки спины на поезде мысли в вашем Я nitial post. Вот один из способов решения проблемы, которую вы ищете.

function allUniqueCha(word){ 
    let wordArray = word.split([,]); 
    return wordArray.reduce((result, element) => { 
    result[element] = result[element] + 1 || 1; 
    return result; 
    }, {}) 
} 
1

Когда вы делаете:

wordObj[c] = +1; 

вы присваиваете значение +1 свойству. То, что вы хотите сделать, это увеличить значение на 1, так:

wordObj[c] += 1; 

Однако первоначально wordObj[c] не существует, так что вы пытаетесь, чтобы увеличить неопределенную, который выдаст ошибку. Поэтому yo должен проверить, существует ли свойство, а если нет, создайте его для его инициализации.

function allUniqueCha(word) { 
 
    var wordObj = {}; 
 
    var wordArray = word.split([, ]); 
 
    wordArray.forEach(function(c) { 
 
    if (!wordObj.hasOwnProperty(c)){ 
 
     wordObj[c] = 0; 
 
    } 
 
    wordObj[c] += 1; 
 
    }); 
 
    console.log(wordArray); 
 
    console.log(wordObj); 
 
} 
 

 
allUniqueCha("Bubble")

Вы также можете использовать уменьшить:

function allUniqueCha(word) { 
 
    return word.split('').reduce(function(acc, c) { 
 
    acc[c] = (acc[c] || 0) + 1; 
 
    return acc; 
 
    },{}); 
 
} 
 

 
console.log(allUniqueCha("Bubble"));

 Смежные вопросы

  • Нет связанных вопросов^_^