【问题标题】:Javascript Using .indexof to search through object and create a table.Javascript 使用 .indexof 搜索对象并创建表。
【发布时间】: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


【解决方案1】:

这里有很多零散的问题,乔纳森。回答第一个问题,'journal' 是一个 Entry 对象数组,每个 Entry 对象包含一个 'events' 数组。这些“事件”是字符串对象。该示例可能令人困惑,因为 Entry 对象从未被赋予变量名或在任何地方显式定义。它仅表示为 addEntry() 函数中所谓的匿名对象。实际上,我只是根据方法名称的上下文来引用名称为“Entry”的这些对象。在代码中,没有任何正式称为“Entry”的对象,而只有一个包含“events”和“squirrel”属性的匿名对象(没有任何名称)。该对象是动态创建的,并由addEntry() 函数推送到日志数组中。

现在回到手头的问题...events 不是journal 中的属性。 eventsjournal 数组中任何“条目”对象的属性。当hasEvent() 被调用时,它会传递一个“Entry”对象(在变量名条目下)和一个要在该条目中查找的特定事件。所以在函数的上下文中,使用entry.events 访问Entry 对象中的事件数组。然后调用.indexOf(event) 搜索该事件数组以查找特定事件的发生。在这种情况下,它在传递给方法的事件字符串和events 数组中的字符串之间执行字符串比较,直到找到匹配项。

最后,我将在 Codecademy 推荐一些交互式 JavaScript 教程。我将提供主要课程的链接,但对于您在本文中遇到的问题,我将指导您阅读第 3 单元中的“For 循环简介”课程以及第 3 单元中的“数组和对象”课程第 6 单元。这些都是免费的。我希望它们对您有所帮助。

https://www.codecademy.com/learn/javascript

祝您学习顺利!

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2012-03-13
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多