eloquent javascript 关联表 解释

2023-12-15

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

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; 

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

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

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

先感谢您。


The table数组是满足不同条件的条目的计数。table[3]是条目数,其中两者entry.squirrel are hasEvent(event, entry)是真的。table[2]是计数,其中entry.squirrel是真的,table[1]是计数,其中hasEvent(event, entry)是真的,并且table[0]是两者都不成立的计数。

所以逻辑是index开始于0. If hasEvent(event, entry)是真的,我们添加1到它。如果entry.squirrel是真的,我们添加2到它。结果是,如果两者都为真,我们最终会添加3。如果两者都不成立,我们不会添加任何内容,所以它仍然是0.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

eloquent javascript 关联表 解释 的相关文章

随机推荐