2016-09-01 1 views
0

Я работаю над упражнением по кодированию и преуменьшаю эту функцию. Функция, которую я пытаюсь создать, - это взять строку, записать количество повторений для каждого слова. Проблема в том, что когда я пытаюсь добавить объект, используя значение myObject.key =, при передаче счетчика var счетчик, который помещается в myObject, по-прежнему равен 0, , хотя обновляется.При добавлении в объект с использованием переменной count, var 'count' по-прежнему 0

function countWords(string) { 
 
    var myArray = string.split(" "); 
 
    var myObject = {}; 
 

 
    for (var i=0; i<myArray.length; i++) { 
 
    var currentWord = myArray[i]; 
 
    //var count2 = 0; 
 
    var count = 0; 
 
    
 
    for (var j=i+1; j<myArray.length; j++) { 
 
     var nextWord = myArray[j]; 
 
     console.log(currentWord + ' and a ' + nextWord) 
 
     console.log('countBefore: '+count) 
 
     if (currentWord===nextWord) { 
 
     count += 1; 
 
     } 
 
     console.log('countAfter: '+count) 
 
    }//for loop2 
 
    
 
    console.log('countOutside: '+count) 
 
    myObject[currentWord] = count; 
 
    }// for loop 
 
    
 
    return myObject; 
 
} 
 

 
//console.log(countWords('blah blah the the the he she be')); 
 
console.log(countWords('blah blah the the the she'));

Некоторые заявления для печати, вероятно, не нужны, но это может быть полезно, чтобы понять, так что я оставил его.

ответ

1

Я считаю, что проблема заключается в том, что каждое слово перезапись счетчик любого из того же слова перед ним. Таким образом, вам нужно либо удалить каждое слово после его подсчета, либо изменить значение счета только для определенного слова, если новое значение выше.

function countWords(string) { 
    var myArray = string.split(" "); 
    var myObject = {}; 

    for (var i=0; i<myArray.length; i++) { 
    var currentWord = myArray[i]; 
    //var count2 = 0; 
    var count = 0; 

    for (var j=i+1; j<myArray.length; j++) { 
     var nextWord = myArray[j]; 
     if (currentWord===nextWord) { 
     count += 1; 
     } 
    } 
    if (!myObject[currentWord] ||count > myObject[currentWord]){ 
     myObject[currentWord] = count; 
    } 
    }// for loop 

    return myObject; 
} 

//console.log(countWords('blah blah the the the he she be')); 
console.log(countWords('blah blah the the the she')); 

Вы могли бы сделать это более эффективным, не утруждая себя считать слово, если вы уже получили значение для него (так как вы обязательно получите меньшее количество на более поздний экземпляр)

+0

Спасибо за быстрый и лаконичный ответ, вы могли бы расширить, если заявление, что вы добавили. Если не 0 или если счетчик больше, чем предыдущий записанный счетчик, добавьте в myObject? – jaysonder

+0

'! MyObject [currentWord]' обрабатывается, если мы еще не определили этот индекс. Если вы этого не сделали, сохраните значение. Если у вас есть, только сохраните его, если он выше. Возможно, будет работать нормально только с '! MyObject [currentWord]'. – StephenTG

0

for (var j=i+1; j<myArray.length; j++) { вся проблема вызвана j = i + 1, так как это приведет к тому, что значение объекта будет установлено равным 0 из-за того, что finalCount станет 0, если currentWord и nextWord не оправдывают true.

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

Вот очистить рабочие скрипка с некоторыми комментариями: https://jsfiddle.net/gzqm5k0d/