Как проверить одно и то же строковое значение для нескольких свойств и сокращение if? - PullRequest
0 голосов
/ 03 июля 2019

В основном, если какое-либо значение в mailPrice содержит N/A или 'n / a`, пытающееся вернуть true, его не происходит, похоже, что я что-то упустил, Также, если есть какой-то лучший подход вместо написания большого условия if я был бы признателен?

main.js

const drug = {
  "isBrand": false,
  "drugName": "Hydr",
  "drugStrength": "5mg-300mg",
  "drugForm": "Tablet",
  "mailPrice": {
    "costEmployer": "0.0",
    "costToday": "N/A",
    "deductible": "n/a",
    "memberCopayAmount": "0.00",
    "penalties": "N/A",
    "totalDrugCost": "0.00"
  }
}

const priceFilterHandler = (item) => {
  let bRet = false;
  if (item.mailPrice.costEmployer === "N/A" || item.mailPrice.costEmployer === "n/a" || item.mailPrice.costToday == "N/A" || item.mailPrice.costToday === "n/a" || item.mailPrice.penalties === "N/A" || item.mailPrice.penalties === "n/a" || item.mailPrice.deductible === "N/A" || item.mailPrice.deductible === "n/a") {
    bRet = true;
  }

  return bRet;
};

console.log(priceFilterHandler(drug));

Ответы [ 4 ]

1 голос
/ 03 июля 2019

Вы можете использовать Object.keys и some:

Object.keys(drug.mailPrice)
      .some(prop => drug.mailPrice[prop].toLowerCase() == 'n/a');

Редактировать на основе вашего комментария: Если вы хотите исключить определенные свойства, вы можете использовать filter

Object.keys(drugz.mailPrice)
    .filter(prop => !['memberCopayAmount', 'totalDrugCost'].includes(prop))
    .some(prop => drugz.mailPrice[prop].toLowerCase() == 'n/a');
1 голос
/ 03 июля 2019

Вы можете определить массив возможных значений и переписать его следующим образом:

const na = ["N/A", "n/a"];

if (na.indexOf(item.mailPrice.costEmployer) != -1 
    || na.indexOf(item.mailPrice.costToday) != -1
    || na.indexOf(item.mailPrice.penalties) != -1
     || na.indexOf(item.mailPrice.deductible) != -1) {
  ...
}

Это может быть полезно, если у вас есть различные условия, которые могут применяться к na, например,

 const na = ["N/A", "n/a", "na", "NA", "n.a."];
0 голосов
/ 03 июля 2019

Ваш код работает нормально, но вы можете перебрать объект, а затем проверить, содержит ли объект н / д или н / д

      // loop through the mailPrice object
      Object.entries(item.mailPrice).forEach(entry => {
         if (entry[1].toString().toLowerCase() === 'n/a') {
          bRet = true;
          retrun;
        }
      });
0 голосов
/ 03 июля 2019

Вы можете попробовать этот способ, используя .some
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

const priceFilterHandler = (item) => {
  return Object.keys(item.mailPrice).some(prop => item.mailPrice[prop].toLowerCase() === 'n/a');
};

console.log(priceFilterHandler(drug));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...