雄辩的javascript关联表解释

时间:2017-08-15 16:51:56

标签: javascript arrays eloquent

我正在迈出编程的第一步,我从雄辩中解决了这个问题,特别是对于weresquirrel问题。在这里:

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(&#34; pizza&#34;,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

我理解的是,一个事件作为参数传递,它会查看Jounral中的对象数组,看它是否存在。但计数如何发生?

if (entry.squirrel) index += 2;

为什么这+2?为什么不指数+ = 3;或指数+ = 4; ???

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

例如,第一个循环是这样的,用于:     console.log(tableFor(&#34; pizza&#34;,JOURNAL));

//FLOW
i=0;

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

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

因此索引递增并变为1.it继续:

     if (entry.squirrel) index += 2; 

squirel是假的,所以索引没有任何反应。如果要找到squirel,为什么它+2 ???

然后           table [index] + = 1 从这一点我无法理解。

有人可以帮我分手吗?这对我的训练非常有帮助。

提前谢谢你。

4 个答案:

答案 0 :(得分:2)

package javaapplication20; public class JavaApplication20 { public static void main(String[] args) { B obj1 = new B("pen",5); C obj2 = new C(2,10); obj1.productdetails(); obj2.productcost(); } } class A{ int price; String product; } class B extends A { int quantity; int total; B () { } B(int q, int t) { quantity = q; total = t; } B(String a,int b) { product=a; price=b; } void productdetails() { System.out.println("The product name is "+product); System.out.println("The price is "+price); } } class C extends B { C(int h,int j) { quantity = h; total = j; } void productcost() { System.out.println("The quantity is "+quantity); System.out.println("The total cost is "+total); } } 数组是符合不同条件的条目数。 Sub GetDataFromClosedBook() Dim SO As String Dim Qty As String Dim ID As String ID = Worksheets("Sheet1").Cells(1, "O").Value MsgBox (ID) 'data location & range to copy SO = "='D:\Excel Software\Shipment Tracking\[7811.xlsx]Shipment - 7811 - Connected Ord'!$A$1:$C$50" Qty = "='D:\Excel Software\Shipment Tracking\[7811.xlsx]Shipment - 7811 - Connected Ord'!$I$1:$I$50" 'link to worksheet With ThisWorkbook.Worksheets(1).Range("A1:C50") .Formula = SO 'convert formula to text .Value = .Value End With With ThisWorkbook.Worksheets(1).Range("E1:E50") .Formula = Qty 'convert formula to text .Value = .Value End With End Sub 是两个table均为table[3]的条目数。 entry.squirrel是仅hasEvent(event, entry)为真的计数,table[2]是仅entry.squirrel为真的计数,table[1]是两者都不为真的计数。

所以逻辑是hasEvent(event, entry)table[0]开始。如果index为真,我们会向其添加0。如果hasEvent(event, entry)为真,我们会向其添加1。结果是如果两者都为真,我们最终会添加entry.squirrel。如果两者都不是真的,我们就不会添加任何东西,所以它仍然是2

然后我们将3添加到0以增加该计数器。

答案 1 :(得分:0)

  1. 关于JOURNAL ::每个条目都包含事件的列表 松鼠? bool值。
  2. 关于CODE ::
  3. 输入 - &gt;事件([beer, bread, brushed teeth, brussel sprouts, candy, carrot, cauliflower, computer, cycling, dentist, exercise, ice cream, lasagna, lettuce, nachos, peanuts, pizza, potatoes, pudding, reading, running, spaghetti, television, touched tree, weekend, work]之一)。

    输出 - &gt;表(1×4)

    table[0] -- Number of entries in JOURNAL which does not has given event and  squirrel is False.
    table[1] -- Number of entries in JOURNAL which has given event and  squirrel is False.
    table[2] -- Number of entries in JOURNAL which does not has given event and  squirrel is True.
    table[3] -- Number of entries in JOURNAL which has given event and  squirrel is True.
    
    **hasEvent(event, entry)  entry.squirrel  table[index]** 
    False                   False           table[0] += 1
    True                    False           table[1] += 1
    False                   True            table[2] += 1
    True                    True            table[3] += 1
    

答案 2 :(得分:0)

我正在阅读同一本书,我遇到了这个讨论,并认为我也可以做出贡献。我也是初学者,如果我错了,请纠正我。无论如何,这就是我理解的方式:

首先,我们使用两个参数tableFor调用函数"pizza"(一个字符串;雅克变成我们必须检查的松鼠的可能原因之一)和JOURNAL(一个对象;它由以下属性组成:"events" - 可能的原因 - 和"squirrel" - Jacques当天是否变成了松鼠)。 JOURNAL本身是一个由多个对象组成的数组。此外,"events"属性也是一个数组。

然后将"pizza"JOURNAL两个参数传递给tableFor参数eventjournal,现在"pizza"为{{} 1}}和eventJOURNAL

由于最终结果必须是一个由4个元素组成的数组,所以我们可以稍后计算相关性,我们声明一个变量来存储这个数组: journal然后我们必须想办法让数组的值在需要时自行递增:var table = [0, 0, 0, 0];这意味着我们要循环遍历for (var i = 0; i < journal.length; i++)的每个元素。 journal表示我们当前正在i = 0数组的第一个元素中查找"pizza",然后继续前进到第二个元素。第三个等等,直到数组的最后一个元素,因此journal

i < journal.length表示我们获取数组的第n个元素并将其分配给var entry = journal[i], index = 0;变量,并定义entryindex中的当前索引数组)为0.

我们在这里调用另一个函数table

hasEvent

这意味着我们将<pre>if (hasEvent(event, entry)) index += 1; if (entry.squirrel) index += 2;</pre> <pre>function hasEvent(event, entry) { return entry.events.indexOf(event) != -1; }</pre> event)和"pizza" entry数组放在journal数组的第0个元素上,并检查它是否包含关键字"pizza" 。如果它不包含它indexOf将返回-1,如果它这样做将返回给定元素所在的第一个索引。在我们的第一个案例{"events":["carrot","exercise","weekend"],"squirrel":false}中,没有"pizza",因此indexOf将返回-1。这一行if (hasEvent(event, entry)) index += 1;询问hasEvent是否为真(indexOf是否不等于-1)。在我们的例子中,它等于-1,因此我们不会将{1}加1。这一行index询问Jacques是否真的变成了松鼠(我们可以看到它是假的),所以我们不会将{2}添加到{{1} }。因此,我们当前使用的索引仍为0.现在我们将其增加1(if (entry.squirrel) index += 2;),因此在第一个场景中我们得到以下结果[1,0,0,0] 。

在我们的index数组中也值得一提:

table[index] += 1;

因此,根据每种情况,我们将从索引0移至索引1,2,3或保持在索引0并根据满足的条件将其增加1。 我希望有人认为我的解释/理解很有用。

答案 3 :(得分:0)

我也对以下内容感到困惑:

if (entry.events.includes(event)) index += 1;
if (entry.squirrel) index += 2;
table[index] += 1;

这实际上意味着:如果 (entry.events.includes(event)) index += 1; === true,将1加到索引。在这种情况下,我们可以将其翻译为table[1] += 1

如果下面的情况也是如此,

if (entry.squirrel) index += 2;

然后: table[3] += 1

table[3]仅在squirrelentry === true

时填充

if (entry.squirrel) index += 2增加了2,因为squirreltable[2]为真。

table[index]实际上只是我们要用作目标的索引。