为什么函数返回这些值?

问题描述:

此功能从a file开始计数事件并将它们存储在一个数组中。为什么函数返回这些值?

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; //9 
    if (entry.squirrel) index += 2; //4 
    table[index] += 1; 
    } 
    return table; 
} 
console.log(tableFor("pizza", JOURNAL)); 

为什么这个函数返回//76, 9, 4, 1?数字应该是//74, 10, 5, 1

我认为函数从零开始计数,但我不这么认为。

+0

您可能需要编辑您的问题,并添加entry.events'和'entry.squirrel'的'值。 – mins 2015-04-04 11:59:21

+0

因为第51行'{“events”:[“pizza”,“花生”,“candy”,“work”],“松鼠”:true}'而返回9,总和为错误的索引......对于其余“如果”条件可能会改变指数...... – Valijon 2015-04-04 12:39:28

+0

好吧......现在很清楚,那是我身边的荒谬问题。万分感谢! – 2015-04-04 13:02:49

最好的办法是此实现...

事件= 90,

比萨饼= 10,

松鼠:真正= 5,

比萨饼和松鼠:真正= 1 ,所以我们需要在执行中休息-2

90 - 10 - 5 - 1 = 74

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]; 
 
    if(hasEvent(event, entry) && entry.squirrel) table[3] += 1; //1 
 
    if(entry.squirrel) table[2] += 1; //5 
 
    if(hasEvent(event, entry)) table[1] += 1; //10 
 
    if(!(hasEvent(event, entry) || entry.squirrel)) table[0] += 1; //76 
 
    // xor 
 
    if(hasEvent(event, entry) && entry.squirrel) table[0] -= 2; //74 
 
    } 
 
    return table; 
 
} 
 
console.log("Expected: 74,10,5,1") 
 
console.log("Calculated: " + tableFor("pizza", JOURNAL));
<script src="http://eloquentjavascript.net/code/jacques_journal.js"></script>

+0

你可能想'else if' ...或者明确地做'if(a && b)...;如果(a &&!b)...;如果(!a && b)...;如果(!a &&!b)...;' – Bergi 2015-04-04 13:21:06