Eloquent Javascript第二名。第4章计算相关性。 Lycanthrope的日志 - [IndexOf Defined] Pt 1

时间:2014-10-09 14:18:19

标签: javascript eloquent

我目前正在阅读Eloquent Javascript,并且发现了那只松鼠的例子。当Jacques(问题的主题)变成松鼠时,我们正在使用一段代码来创建表格/矩阵。它引用了我们之前制作的期刊。

这是代码。

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]

现在我理解函数tableFor的作用以及它如何从变量日志引用事件(我们将日志作为单独的文件和引用)但我不理解!= 1并返回函数tableFor 。我假设我们想要确定我们要查找的这个事件是否返回true如果是这样的话我们为什么不做&#34; if&#34;条目?或者== 0,或== 1?我错过了什么吗?

如果有人可以解释有关

的所有信息
return entry.events.indexOf(event) != -1;

非常感谢。

2 个答案:

答案 0 :(得分:2)

当且仅当传入任何内容时,indexOf函数返回正数(或零)。如果没有出现,indexOf返回-1。如果事件发生,hasEvent函数将返回true,否则返回false。

答案 1 :(得分:0)

OP要求有两个方面:

  1. indexOf功能如何运作
  2. 为什么在比较时不使用if语句
  3. 接受的答案回答了第一个问题。然而,第二个不是。

    OP似乎理解它,因为他接受了答案,但对于这个问题的其他观众,它可能仍然不清楚。

    function hasEvent(event, entry) {
     return entry.events.indexOf(event) != -1;
    }
    

    等同于以下内容:

    function hasEvent(event, entry) {
         if (entry.events.indexOf(event) != -1)
             return true;
         else
             return false;
        }