【发布时间】:2015-12-29 20:05:03
【问题描述】:
我将首先粘贴整个示例的代码,然后突出显示我的问题所在。 var 日记 = [];
function addEntry(events, didITurnIntoASquirrel) {
journal.push({
events: events,
squirrel: didITurnIntoASquirrel
});
}
addEntry(["work", "touched tree", "pizza", "running",
"television"], false);
addEntry(["work", "ice cream", "cauliflower", "lasagna",
"touched tree", "brushed teeth"], false);
addEntry(["weekend", "cycling", "break", "peanuts",
"beer"], true);
console.log(journal)
//Making calculate phi for different inputs.
function phi(table) {
return (table[3] * table[0] - table[2] * table[1]) /
Math.sqrt((table[2] + table[3]) *
(table[0] + table[1]) *
(table[1] + table[3]) *
(table[0] + table[2]));
}
function hasEvent(event, entry) {
return entry.events.indexOf(event) != -1;
}
我想我理解 entry.events.indexOf(event) 部分,但是我为什么可以做 entry.events 令人困惑,我知道 events 是日志中的一个属性,并且要访问我可以使用的属性 (.)。所以我可以做events.indexOf(),但是我不明白为什么我可以做entry.events.indexOf()。事件如何成为条目的属性?
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]
在tableFor中,我了解到我已经创建了一个表格模板, 我看到我正在遍历日记,但我不明白为什么我设置变量索引 = 0,然后索引 += 1,尤其是当我在日记中找到“松鼠”时索引 += 2。我也不明白 table[index] +=1 在做什么。如果 table 是一个数组,这是否意味着它将 +1 添加到数组中的所有索引。 ([0,0,0,0] -> [1,1,1,1])?命令 table[index] +=1 如何访问表中的所有索引?
还有,
是否有人对与此类似的示例问题提出建议,该问题测试了类似的概念,但编写得更好,并就如何访问对象内的属性提供了更清晰的解释?我刚开始学习面向对象,这个例子很糟糕,因为解释很简短,没有贯穿代码。
谢谢!
【问题讨论】:
-
另外我应该注意到没有松鼠没有比萨= 0,0 没有松鼠,是比萨= 0,1 是松鼠,没有比萨= 1,0 是松鼠,是比萨= 1,1 因此当它确实索引 +=1,条件是您有 Pizza,您只是将光标移动到 0,1 点。如果您有比萨饼并且您有松鼠,那么您将转移到 1,1 点。所以它只是移动到那个位置,然后用命令 table[index] +=1 添加 +1 仅在 (11) 位置(对于这个条件)?
标签: javascript arrays function object indexof