我正在迈出编程的第一步,但我被 Eloquent 这个问题所困扰,特别是灰鼠问题。就这样:
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;
squirel 是 false,所以索引不会发生任何变化。如果找到 squirel,为什么它是 +2 ???
那么 表[索引] += 1 从这一点上我无法理解。
有人可以帮我分解一下吗?这对我的训练会有很大帮助。
提前谢谢您。
最佳答案
table
数组是满足不同条件的条目的计数。 table[3]
是 entry.squirrel
和 hasEvent(event,entry)
都为 true 的条目的计数。 table[2]
是仅 entry.squirrel
为 true 时的计数,table[1]
是仅 hasEvent( event、entry)
为 true,table[0]
是两者都不为 true 的计数。
所以逻辑是index
从0
开始。如果 hasEvent(event,entry)
为 true,我们向其添加 1
。如果 entry.squirrel
为 true,我们将向其添加 2
。结果是,如果两者都为真,我们最终会添加 3
。如果两者都不成立,我们不会添加任何内容,因此它仍然是 0
。
然后我们将 1
添加到 table[index]
以增加该计数器。
关于javascript - eloquent javascript 关联表 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697619/