Javascript 数据通过每个函数后出现意外结果

Javascript 数据通过每个函数后出现意外结果,javascript,underscore.js,Javascript,Underscore.js,data.entries中的每个对象可以指定五个值中的一个作为其状态值: /* Completed, Cancelled Not Started, In Progress, Deffered */ 通过下面的代码块后,每个条目的状态都返回为open,此时它们应该是open和closed的混合,具体取决于它进入该块时的状态 _.each(data.entries, function(element){ var entryStatus = _.chain(element)

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

/*
Completed, Cancelled

Not Started, In Progress, Deffered
*/
通过下面的代码块后,每个条目的状态都返回为open,此时它们应该是open和closed的混合,具体取决于它进入该块时的状态

_.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;

});
有人能告诉我我做错了什么,为什么每个状态都恢复为打开状态吗?

这行

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

if(i.status === 'Completed' || i.status === 'Cancelled'){
与另一个
相同,如果
,则不能执行类似的多个条件。大多数语言都无法编译,但javascript认为这是错误的

if(i.status === 'Completed' || truthy_statement)
它总是计算这一行的
true

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

if(i.status === 'Completed' || i.status === 'Cancelled'){
与另一个
相同,如果
,则不能执行类似的多个条件。大多数语言都无法编译,但javascript认为这是错误的

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

它的计算结果总是
true

看起来您的比较不正确。尝试:

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'){

看来你的比较不对。尝试:

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'){

我没有使用下划线.js,但您是否尝试过
if(I.status==='Completed'| | I.status=='Cancelled'){
?与其他if语句相同?我没有使用下划线.js,但您是否尝试过
if(I.status=='Completed'| I.status=='Cancelled'){
?与其他if语句相同?