我遇到了一段我想弄清楚的代码,代码基本上存储了一个单词出现在文本文档中的时间,因此函数 countWordsIntext 会在所需文本并显示文本中的单词和出现次数, 例如 会:3 但是:5 非常:6
在查看对文本中的单词进行计数的函数时,我无法弄清楚有条件的tenary操作应该如何工作。非常感谢解释
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]
对象属性是如何更新的。
答案 0 :(得分:4)
说你有
var foo = {};
让你感到困惑的一句话就是
foo.bar = foo.bar ? foo.bar + 1 : 1; // line A
问问自己
foo.bar
是什么?它是未定义,我们没有给foo
一个属性 bar foo.bar
是什么?它是1
; foo.bar
未定义 falsy ,因此三元运营商向我们提供了回复1
foo.bar
是什么?它是2
; foo.bar
1
为{em> truthy ,因此三元运营商将我们送回foo.bar + 1
A行可以重复,直到你的数字用完或世界爆炸
像这样写这是一种解决undefined + 1
问题的方法,这会给NaN
一个同样有效的解决方案(我觉得个人阅读起来有点干净)就是
foo.bar = (foo.bar || 0) + 1;