Eloquent Javascript第二名.第4章.计算相关性.Lycarthorpe的日志-〔定义的索引〕第1部分



我目前正在学习Eloquent Javascript,并遇到了are松鼠的例子。当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的作用以及它如何引用变量journal中的事件(我们将journal作为单独的文件和引用),但我不理解!=1并返回函数表For内部。我想我们想确定我们正在寻找的这个事件是否返回true,如果是这样的话,为什么我们不输入"if"?或者==0,或者==1?我是不是错过了什么?

如果有人能解释的一切

return entry.events.indexOf(event) != -1;

我们将不胜感激。

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

OP的要求有两个方面:

  1. indexOf函数的工作原理
  2. 为什么在比较时不使用if语句

第一个问题由公认的答案回答。然而,第二个不是。

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;
    }

最新更新