javascript - eloquent javascript 关联表 解释

标签 javascript arrays eloquent

我正在迈出编程的第一步,但我被 Eloquent 这个问题所困扰,特别是灰鼠问题。就这样:

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]

我确实理解第一个函数 hasevent,如果条目包含给定事件,它会返回 true。

我无法理解的是 tableFor 函数。我无法了解函数如何流动以及表如何获取其值。例如 console.log(tableFor("pizza", JOURNAL)); ,我们得到[76,9,4,1]。但看在上帝的份上怎么办?

日记由本书提供,如下所示:

var JOURNAL = [
  {"events":["pizza","exercise","weekend"],"squirrel":false},
  {"events":["bread","pudding","brushed teeth","weekend","touched 
  tree"],"squirrel":false},
  {"events":["carrot","nachos","brushed 
  teeth","cycling","weekend"],"squirrel":false},
  {"events":["brussel sprouts","ice cream","brushed 
  teeth","computer","weekend"],"squirrel":false},
  {"events":["potatoes","candy","brushed 
  teeth","exercise","weekend","dentist"],"squirrel":false},
  {"events":["brussel sprouts","pudding","brushed 
  teeth","running","weekend"],"squirrel":false},
  {"events":["pizza","brushed teeth","computer","work","touched 
  tree"],"squirrel":false},
  {"events":["bread","beer","brushed 
  teeth","cycling","work"],"squirrel":false},
  {"events":["cauliflower","brushed teeth","work"],"squirrel":false},
  {"events":["pizza","brushed teeth","cycling","work"],"squirrel":false},
  {"events":["lasagna","nachos","brushed teeth","work"],"squirrel":false},
  {"events":["brushed teeth","weekend","touched tree"],"squirrel":false},
  {"events":["lettuce","brushed 
   teeth","television","weekend"],"squirrel":false},
  {"events":["spaghetti","brushed teeth","work"],"squirrel":false},
  {"events":["brushed teeth","computer","work"],"squirrel":false},
  {"events":["lettuce","nachos","brushed teeth","work"],"squirrel":false},
  {"events":["carrot","brushed teeth","running","work"],"squirrel":false} ...etc

我的理解是,事件作为参数传递,它会查看日志中的对象数组以查看它是否存在。但计数是如何进行的呢?

if (entry.squirrel) index += 2;

为什么是+2?为什么不索引 += 3;或索引 += 4; ???

最后为什么 table[index] += 1; ???

例如,第一个循环是这样的, for : console.log(tableFor("披萨", JOURNAL));

//FLOW
i=0;

从日志上面的第一行开始,出现了披萨。

     if (hasEvent(event, entry)) index += 1;

因此索引增加并变为 1。它继续:

     if (entry.squirrel) index += 2; 

squirel 是 false,所以索引不会发生任何变化。如果找到 squirel,为什么它是 +2 ???

那么 表[索引] += 1 从这一点上我无法理解。

有人可以帮我分解一下吗?这对我的训练会有很大帮助。

提前谢谢您。

最佳答案

table 数组是满足不同条件的条目的计数。 table[3]entry.squirrelhasEvent(event,entry) 都为 true 的条目的计数。 table[2] 是仅 entry.squirrel 为 true 时的计数,table[1] 是仅 hasEvent( event、entry) 为 true,table[0] 是两者都不为 true 的计数。

所以逻辑是index0开始。如果 hasEvent(event,entry) 为 true,我们向其添加 1。如果 entry.squirrel 为 true,我们将向其添加 2。结果是,如果两者都为真,我们最终会添加 3。如果两者都不成立,我们不会添加任何内容,因此它仍然是 0

然后我们将 1 添加到 table[index] 以增加该计数器。

关于javascript - eloquent javascript 关联表 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697619/

相关文章:

java - 将二维字符串数组分配给一维对象数组

javascript - 根据数组关键字计算文本字符串中找到的单词数

php - Laravel Eloquent hasManyThrough 关系 + 分页

php - 如何扫描 DynamoDb 不存在

javascript - 从 JSON 字符串拆分有效负载

JavaScript 如何从选定的文本中提取链接

Java 检索 JSON 中嵌套字段的方法

javascript - Shift Bootstrap 弹出窗口

javascript - 使用 clickToggle 并在单击另一个元素时关闭元素

laravel - Laravel: Eloquent 动态where子句