Попытка преобразовать код lodash в методы es6;это ошибка? - PullRequest
0 голосов
/ 02 июня 2019

поэтому ниже закомментированный код работает в lodash, просто хотел преобразовать в es6, чтобы сделать его более простым и понятным, его ошибка выдачи некоторых неопределена.любая помощь здесь?

main.js

        const rejectMessagerrors = [45,67,87];
        const drug = [{
            "isBrand": true,
            "drugName": "Lipitor",
            "specialtyPrice": {}
          },
          {
            "isBrand": false,
            "drugName": "Atorvastatin Calcium",
            "drugStrength": "80mg",
            "drugForm": "Tablet",
            "mailPrice": {
              "totalQuantity": 90,
              "rejectMessage": [{
                "settlementCode": "45",
                "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"
              }]
            },
            "retailPrice": {
              "totalQuantity": 30,
              "rejectMessage": [{
                "settlementCode": "99",
                "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"
              }]
            },
            "specialtyPrice": {}
          }
        ];

            function priceFilterHandler(drug) {
                // const pricePath = ['mailPrice.rejectMessage', 'retailPrice.rejectMessage'];
  //
  // _.forEach(pricePath, function (path) {
  //   const rejectMsg = _.get(drug, path);
  //   const hasCode = rejectMsg && rejectMsg.find(i => !!~rejectMessagerrors.indexOf(+i.settlementCode));
  //   hasCode && delete drug[path.split('.').shift()];
  // });
  const retailHasCode = findErrCode(item.retailPrice.rejectMessage);
  const mailHasCode = findErrCode(item.mailPrice.rejectMessage);

  if (retailHasCode) {
    delete item.retailPrice;
  }

  if (mailHasCode) {
    delete item.mailPrice;
  }

  return item;
            }

   const filteredPrices = _.map(drug, priceFilterHandler);

метод findErr

let findErrCode = data => {
  data.some(i => rejectMessagerrors.includes(+i.settlementCode));
}

ожидаемый результат

, поскольку mailPrice в содержит параметр settingCode 45, которыйцена должна быть опущена, она соответствует элементу списка rejectMessagerrors

[{
                "isBrand": true,
                "drugName": "Lipitor",
                "specialtyPrice": {}
              },
              {
                "isBrand": false,
                "drugName": "Atorvastatin Calcium",
                "drugStrength": "80mg",
                "drugForm": "Tablet",
                "retailPrice": {
                  "totalQuantity": 30,
                  "rejectMessage": [{
                    "settlementCode": "99",
                    "settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"
                  }]
                },
                "specialtyPrice": {}
              }
            ];

1 Ответ

1 голос
/ 02 июня 2019

Вот некоторые проблемы, которые у вас были в вашем коде

  • Нет возвращаемого значения из findError function
  • у некоторых элементов нет mailPrice or retailPrice, к которым вы пытаетесь обратиться item.mailPrice.rejetcMessage

const rejectMessagerrors = [45, 67, 87];
const drug = [{"isBrand": true,"drugName": "Lipitor","specialtyPrice": {}},{"isBrand": false,"drugName": "Atorvastatin Calcium","drugStrength": "80mg","drugForm": "Tablet","mailPrice": {"totalQuantity": 90,"rejectMessage": [{"settlementCode": "45","settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"}]},"retailPrice": {"totalQuantity": 30,"rejectMessage": [{"settlementCode": "99","settlementDesc": "Sorry, the system is temporarily:Lo sentimos,Intente(Código de error 85)"}]},"specialtyPrice": {}}];

let findErrCode = data => data && data.some(i => rejectMessagerrors.includes(+i.settlementCode));

let op = drug.map(item=> {
const retailHasCode = findErrCode(item.retailPrice && item.retailPrice.rejectMessage);
  const mailHasCode = findErrCode(item.mailPrice && item.mailPrice.rejectMessage);

  if (retailHasCode) {
    delete item.retailPrice;
  }

  if (mailHasCode) {
    delete item.mailPrice;
  }

  return item;
})

console.log(op)
...