2014-11-24 4 views
2

Я натолкнулся на кусок кода, который я пытаюсь выяснить, код в основном сохраняет время, в течение которого слово появляется в текстовом документе, поэтому функция countWordsIntext занимает в желаемый текст и отображает слово и количество появления в тексте, например бы: 3 но: 5 очень: 6Javascript тернарный оператор с объектом

, глядя на функцию, которая подсчитывает слово в тексте я не могу понять, как предполагается, что будет работать условная операция. Объяснение было бы очень признателен

var wordCounts = {}; 

function countWordsInText(text) { 
    var words = text.toString() 
       .toLowerCase() 
       .split(/\W+) 
       .sort(); 
    for(var index in words) { 
    var word = words[index]; 
    if(word) { 
    wordCounts[word] = 
     (wordCounts[word]) ? wordCounts[word] + 1 : 1; 
     } 
    } 
} 

function display() 
{ 
    for (var index in wordCounts) 
    console.log(index + ': ' + wordCounts[index]); 
} 

Я не понимаю, как обновляется свойство wordCounts[word] объекта.

+1

Этот код? 'wordCounts [word] = ....' Возможно, разрыв строки вас сбивает с толку. Если wordCounts [word] существует, увеличьте его, иначе установите его в 1 (потому что это новая запись). И это не массив, это объект, к которому члены могут получить доступ, используя синтаксис типа словаря/массива. –

ответ

4

Скажем, у вас есть

var foo = {}; 

линия, которая сбивает с толку вас будет

foo.bar = foo.bar ? foo.bar + 1 : 1; // line A 

Задайтесь

  1. Что foo.bar в самом начале? Он неопределенные, мы не дали foo свойства бара
  2. Что foo.bar после первой временной линии А выполняются? Это 1; foo.bar был неопределенными который falsy так тройной оператор вернул нам 1
  3. Что такое foo.bar после второй временной линии A выполняется? Это 2; foo.bar был 1 которого truthy, поэтому тройной оператор вернул нам foo.bar + 1

линия А может повторяться до тех пор, пока кончатся цифры или мир взрывает

Записав его, как это способ решить undefined + 1 проблему, которая дала бы NaN


столь же верное решение (которое я нахожу немного чище, чтобы читать лично) будет делать

foo.bar = (foo.bar || 0) + 1; 
Смежные вопросы