首页 > 解决方案 > Javascript 检查数组中的每个元素

问题描述

我有这个代码:

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>

在这种情况下,div 必须以“CONFIRMED”值呈现。我相信这个逻辑有一个错误,我需要 'subStatus' 作为一个数组并以某种方式检查每个元素,但我该如何实现呢?

有人可以帮助我解决如何正确实现此逻辑的解决方案吗?

标签: javascript

解决方案


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

subStatuses = {
  "subStatus1": { "expectedStatus": "CREATED",   "newStatus": "CONFIRMED" },
  "subStatus2": { "expectedStatus": "CREATED",   "newStatus": "CONFIRMED" },
  "subStatus3": { "expectedStatus": "CREATED",   "newStatus": "CONFIRMED" },
  "subStatus4": { "expectedStatus": "CANCELLED", "newStatus": "REMOVED" },
  "subStatus5": { "expectedStatus": "CANCELLED", "newStatus": "REMOVED" },
  "subStatus6": { "expectedStatus": "CANCELLED", "newStatus": "REMOVED" },
  "subStatus7": { "expectedStatus": "REVIEW",    "newStatus": "CHECKED" },
  "subStatus8": { "expectedStatus": "REVIEW",    "newStatus": "CHECKED" },
  "subStatus9": { "expectedStatus": "REVIEW",    "newStatus": "CHECKED" },
}

function newStatus( status, subStatus )
{
  if ( subStatus in subStatuses && status === subStatuses[subStatus].expectedStatus )
  {
    return subStatuses[subStatus].newStatus;
  }
  return undefined;
}

element = document.getElementById( "to_check" );
element.innerText = newStatus(
  element.getAttribute( "status" ),
  element.getAttribute( "substatus" )
);
<div id="to_check" status="CREATED" substatus="subStatus2" />


推荐阅读