我将首先粘贴整个示例的代码,然后突出显示我的问题所在。 var journal = [];
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.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中,据我所知,我创建了一个表模板, 我看到我正在迭代日记,但是我不明白为什么我设置变量index = 0,然后索引+ = 1,特别是当我在我的日记中找到“squirrel”时索引+ = 2。我也不明白表[index] + = 1正在做什么。如果table是一个数组,那意味着它会为数组中的所有索引添加+1。 ([0,0,0,0] - &gt; [1,1,1,1])?命令表[index] + = 1如何访问表中的所有索引?
此外,
是否有人对类似于此问题的示例问题提出建议,它会测试类似的概念,但编写得更好,并提供有关如何访问对象内属性的更清晰的解释?我刚开始学习面向对象,这个例子非常糟糕,因为解释很简短,不会贯穿代码。
谢谢!
答案 0 :(得分:1)
这里有很多分散的问题,乔纳森。要回答第一个&#39;期刊&#39;是一个Entry对象数组,每个Entry对象包含一个&#39;事件数组。这些活动&#39;是String对象。该示例可能令人困惑,因为Entry对象从未被赋予变量名称或在任何地方显式定义。它仅表示为addEntry()
函数中所谓的匿名对象。事实上,我只是在名称&#39; Entry&#39;中引用这些对象。凭借方法名称的上下文。在代码中,没有任何正式称为“条目”的对象。但只有一个匿名对象(没有任何名称)包含&#39;事件&#39;和&#39; squirrel&#39;属性。该对象即时创建并通过addEntry()
函数推送到日志数组中。
现在回到手头的问题...... events
不是journal
中的属性。 events
是任何“条目”的属性。 journal
数组中的对象。当hasEvent()
被调用时,会传递一个&#39;条目&#39}。对象(在变量名称条目下)和要在该条目中查找的特定事件。因此,在函数的上下文中,使用entry.events
访问Entry对象中的events数组。然后,对.indexOf(event)
的调用会搜索该事件数组以查找特定事件的发生。在这种情况下,它在传递给方法的事件字符串和events
数组中的字符串之间执行字符串比较,直到找到匹配项。
我将通过在Codecademy上推荐一些交互式JavaScript教程来结束。我将提供主要课程的链接,但是对于您在这篇文章中提到的问题,我将引导您进入“循环简介”#39;第3单元课程以及“数组和对象”课程第6单元的课程。这些都是免费的。我希望你发现它们很有帮助。
https://www.codecademy.com/learn/javascript
祝你好运!