数据通过_.each函数后的意外结果

时间:2016-06-03 11:01:16

标签: javascript underscore.js

data.entries中的每个对象可以分配五个值中的一个作为其状态值:

/*
Completed, Cancelled

Not Started, In Progress, Deffered
*/

在通过以下代码块之后,每个条目的状态将返回为 open ,当它们应该是 open closed em>,取决于进入区块时的状态。

_.each(data.entries, function(element){

    var entryStatus = _.chain(element)
      .countBy(function (i) { 

        if(i.status === 'Completed' || 'Cancelled'){
            i.status = 'closed';
        }

        if(i.status === 'Not Started' || 'In Progress' || 'Deffered'){
            i.status = 'open';
        }

        return i.status;

      })
      .value();

    element.entryStatus = entryStatus;

});

有谁可以告诉我这里我做错了什么以及为什么每个状态都以打开的形式返回?

2 个答案:

答案 0 :(得分:2)

这一行

if(i.status === 'Completed' || 'Cancelled'){

应该是

if(i.status === 'Completed' || i.status === 'Cancelled'){

与其他if相同 - 你无法做到这样的多个条件。大多数语言都无法编译,但javascript将其视为

if(i.status === 'Completed' || truthy_statement)

始终评估true

答案 1 :(得分:0)

您似乎无法正确比较。尝试:

if(i.status === 'Completed' || i.status === 'Cancelled'){
    i.status = 'closed';
}

if(i.status === 'Not Started' || i.status === 'In Progress' || i.status === 'Deffered'){
    i.status = 'open';
}

这总是会导致真实:

if('In Progress' || 'Deffered'){