Javascript使用.indexof搜索对象并创建表格。

时间:2015-12-29 20:05:04

标签: javascript arrays function object indexof

我将首先粘贴整个示例的代码,然后突出显示我的问题所在。     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如何访问表中的所有索引?

此外,

是否有人对类似于此问题的示例问题提出建议,它会测试类似的概念,但编写得更好,并提供有关如何访问对象内属性的更清晰的解释?我刚开始学习面向对象,这个例子非常糟糕,因为解释很简短,不会贯穿代码。

谢谢!

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

祝你好运!