我正在迈出编程的第一步,但我被雄辩的这个问题所困扰,特别是灰鼠问题。事情是这样的:
function hasEvent(event, entry) {
return entry.events.indexOf(event) != -1;
}
function tableFor(event, journal) {
var table = [0, 0, 0, 0];
for (var i = 0; i < journal.length; i++) {
var entry = journal[i], index = 0;
if (hasEvent(event, entry)) index += 1;
if (entry.squirrel) index += 2;
table[index] += 1;
}
return table;
}
console.log(tableFor("pizza", JOURNAL));
// → [76, 9, 4, 1]
我确实理解第一个函数 hasevent,如果条目包含给定事件,它会返回 true。
我无法理解的是 tableFor 函数。我无法了解函数如何流动以及表如何获取其值。例如 console.log(tableFor("pizza", JOURNAL)); ,我们得到[76,9,4,1]。但看在上帝的份上怎么办?
该日志由本书提供,如下所示:
var JOURNAL = [
{"events":["pizza","exercise","weekend"],"squirrel":false},
{"events":["bread","pudding","brushed teeth","weekend","touched
tree"],"squirrel":false},
{"events":["carrot","nachos","brushed
teeth","cycling","weekend"],"squirrel":false},
{"events":["brussel sprouts","ice cream","brushed
teeth","computer","weekend"],"squirrel":false},
{"events":["potatoes","candy","brushed
teeth","exercise","weekend","dentist"],"squirrel":false},
{"events":["brussel sprouts","pudding","brushed
teeth","running","weekend"],"squirrel":false},
{"events":["pizza","brushed teeth","computer","work","touched
tree"],"squirrel":false},
{"events":["bread","beer","brushed
teeth","cycling","work"],"squirrel":false},
{"events":["cauliflower","brushed teeth","work"],"squirrel":false},
{"events":["pizza","brushed teeth","cycling","work"],"squirrel":false},
{"events":["lasagna","nachos","brushed teeth","work"],"squirrel":false},
{"events":["brushed teeth","weekend","touched tree"],"squirrel":false},
{"events":["lettuce","brushed
teeth","television","weekend"],"squirrel":false},
{"events":["spaghetti","brushed teeth","work"],"squirrel":false},
{"events":["brushed teeth","computer","work"],"squirrel":false},
{"events":["lettuce","nachos","brushed teeth","work"],"squirrel":false},
{"events":["carrot","brushed teeth","running","work"],"squirrel":false} ...etc
我的理解是,事件作为参数传递,它会查看日志中的对象数组以查看它是否存在。但计数是如何进行的呢?
if (entry.squirrel) index += 2;
为什么这个是+2?为什么不索引 += 3;或索引 += 4; ???
最后为什么 table[index] += 1; ???
例如,第一个循环是这样的, for :
console.log(tableFor("披萨", JOURNAL));
//FLOW
i=0;
从日志上面的第一行开始,出现了披萨。
if (hasEvent(event, entry)) index += 1;
因此索引增加并变为 1。它继续:
if (entry.squirrel) index += 2;
squirrel 是 false,索引不会发生任何变化。如果找到 squirrel,为什么它是 +2 ???
然后
表[索引] += 1
从这一点上我无法理解。
有人可以帮我分解一下吗?这对我的训练会有很大帮助。
先感谢您。