2014-11-24 65 views
2

我遇到了一段代码,我试图弄清楚,代码基本上存储了一个单词出现在文本文档中的时间量的发生,所以函数countWordsWordsIntext需要在所需的文本并显示文字和发生在文本的数量, 如 会:3 但:5 非常6使用对象的Javascript三元运算符

一边看着计数文本的话,我找不出如何功能有条件的十进制操作应该是有效的。一种解释将是非常赞赏

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(因为它是一个新条目)。它不是一个数组,它是一个可以使用字典/数组类型语法访问成员的对象。 – 2014-11-24 20:14:20

回答

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.bar1这是truthy,所以三元运营商提供给我们带回foo.bar + 1

A线可以重复,直到你用完的数字或世界爆炸

写它像这是一个办法解决undefined + 1问题,这将使NaN


一个同样有效的解决方案(我找了一下吸尘器亲自阅读)是做

foo.bar = (foo.bar || 0) + 1;