Javascript检查数组中的每个元素

Javascript检查数组中的每个元素,javascript,Javascript,我有以下代码: var newStatus = (status, subStatus) => { if(status === 'CREATED' && (subStatus === 'subStatus1' || 'subStatus2' || 'subStatus3')){ return 'CONFIRMED'; } else if(status === 'CANCELLED' && (subStat

我有以下代码:

var newStatus = (status, subStatus) => {
  if(status === 'CREATED' && 
         (subStatus === 'subStatus1' || 'subStatus2' || 'subStatus3')){
    return 'CONFIRMED';
  } else if(status === 'CANCELLED' && 
         (subStatus === 'subStatus4' || 'subStatus5' || 'subStatus6')){
    return 'REMOVED';
  } else if(status === 'REVIEW' && 
        (subStatus === 'subStatus7' || 'subStatus8' || 'subStatus9')){
    return 'CHECKED';
  }
}

<div>newStatus('CREATED', 'subStatus2')</div>
var newStatus=(状态,子状态)=>{
如果(状态==‘已创建’&&
(子状态===‘子状态1’| |‘子状态2’| |‘子状态3’){
返回“已确认”;
}否则如果(状态==‘已取消’
(子状态===‘子状态4’| |‘子状态5’| |‘子状态6’){
返回“已删除”;
}否则,如果(状态=='REVIEW'&&
(子状态===‘子状态7’| |‘子状态8’| |‘子状态9’){
返回“已检查”;
}
}
newStatus('已创建','子状态2')
在这种情况下,div必须使用值“confirm”呈现。 我相信这个逻辑有一个bug,我需要“subStatus”成为一个数组,并以某种方式检查每个元素,但我如何才能做到这一点


有人能帮我找到一个解决方案来正确实现这个逻辑吗?

您可以创建子状态的映射,然后,对于唯一的子状态,检查它是否也具有预期状态,如果是,则返回新状态:

子状态={
“子状态1”:{“expectedStatus”:“已创建”,“newStatus”:“已确认”},
“子状态2”:{“预期状态”:“已创建”,“新闻状态”:“已确认”},
“子状态3”:{“预期状态”:“已创建”,“新闻状态”:“已确认”},
“子状态4”:{“expectedStatus”:“CANCELLED”,“newStatus”:“REMOVED”},
“子状态5”:{“expectedStatus”:“CANCELLED”,“newStatus”:“REMOVED”},
“子状态6”:{“expectedStatus”:“CANCELLED”,“newStatus”:“REMOVED”},
“子状态7”:{“expectedStatus”:“REVIEW”,“newStatus”:“CHECKED”},
“子状态8”:{“expectedStatus”:“REVIEW”,“newStatus”:“CHECKED”},
“子状态9”:{“expectedStatus”:“REVIEW”,“newStatus”:“CHECKED”},
}
函数newStatus(状态、子状态)
{
if(子状态中的子状态&&status==子状态[subStatus].expectedStatus)
{
返回子状态[subStatus].newStatus;
}
返回未定义;
}
元素=document.getElementById(“to_check”);
element.innerText=newStatus(
元素。getAttribute(“状态”),
元素getAttribute(“子状态”)
);

您可以使用一个对象将每个子阵列映射到正确的状态,这样您就不需要为所有可能的结果添加多个if语句。您可以只更新对象

const statusMap={
创建:{
子状态:['subStatus1'、'subStatus2'、'subStatus3'],
值:“已确认”,
},
取消:{
sub:['Substatus 4'、'Substatus 5'、'Substatus 6'],
值:“已删除”,
},
审查:{
sub:['Substatus 7'、'Substatus 8'、'Substatus 9'],
值:“已检查”,
},
};
const newStatus=(状态、子状态、状态映射)=>{
//将状态改为小写
const lower=status.toLowerCase();
//如果不存在,则返回
如果(!statusMap[lower])返回;
//获取子数组并返回值
const{sub,value}=statusMap[lower];
//如果子数组中存在该项,则返回该值
if(sub.includes(subStatus))返回值;
}
const status1=newStatus('CREATED','subStatus2',statusMap);
const status2=newStatus('CANCELLED','subStatus6',statusMap);
const status3=newStatus('REVIEW','subStatus7',statusMap);
console.log(状态1);
控制台日志(状态2);

控制台日志(状态3)您的代码有一些大问题。这种比较:

subStatus === 'subStatus1' || 'subStatus2' || 'subStatus3'
如果
subStatus
的值为
'subStatus1'
,则将返回
true
。如果不是,它将返回
true
,因为
'subStatus2'
将被解释为true。
如果要检查
subStatus
是否具有
subStatus1
subStatus2
subStatus1
的值之一,则应将这些值包含在如下数组中:

const SUB_STATUSES = ['subStatus1', 'subStatus2', 'subStatus3'];
SUB_STATUSES.includes(subStatus)
然后,您必须使用JavaScript的数组方法
includes()
,如下所示:

const SUB_STATUSES = ['subStatus1', 'subStatus2', 'subStatus3'];
SUB_STATUSES.includes(subStatus)
如果
subStatus
中包含
subStatus
的值,则返回
true
。您可以在这里查看文档

修改后的代码应如下所示:

const SUB_STATUSES1 = ['subStatus1', 'subStatus2', 'subStatus3'];
const SUB_STATUSES2 = ['subStatus4', 'subStatus5', 'subStatus6'];
const SUB_STATUSES3 = ['subStatus7', 'subStatus8', 'subStatus9'];
const newStatus = (status, subStatus) => {
    if (
        status === 'CREATED' && SUB_STATUSES1.includes(subStatus)
    ) {
        return 'CONFIRMED';
    }
    if (
        status === 'CANCELLED' && SUB_STATUSES2.includes(subStatus)
    ) {
        return 'REMOVED';
    }
    if (
        status === 'REVIEW' && SUB_STATUSES3.includes(subStatus)
    ) {
        return 'CHECKED';
    }
};

除此之外,可能还有另一个问题,因为可能有一些情况会出现这种情况。

如果您不详细解释预期结果,我们无法帮助解决逻辑问题,当前代码的结果与此有何不同。同样,subStatus==='subStatus7'| | |'subStatus8'
不是如何将变量与多个字符串进行比较,您需要的是
yourVar===“a”| yourVar==“b”
(比较需要包含在每个“OR”中)这是否回答了您的问题@Christian你不能在评论中发布多行代码可能会有帮助是的,这就是我想要的答案。非常感谢你的帮助。