【问题标题】:Trying to convert lodash code to es6 methods; it's throwing error?尝试将 lodash 代码转换为 es6 方法;它抛出错误?
【发布时间】:2019-06-02 16:31:07
【问题描述】:

所以下面注释掉的代码在 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 中包含结算代码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": {}
              }
            ];

【问题讨论】:

  • 你没有从findError函数返回任何东西
  • @CodeManiac 没有解决问题它仍然说一些未定义
  • 你能发布想要的输出吗?将尝试作为一个工作的 sn-p 发布以涵盖所有问题
  • 请注意,您说的是在 es*5* 中添加的东西,而不是 es6...
  • @CodeManiac 我添加了预期的输出

标签: javascript arrays ecmascript-6 lodash


【解决方案1】:

这是您在代码中遇到的一些问题

  • findError 函数没有返回值
  • 某些元素没有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)

【讨论】:

  • 有时对象不返回 rejectMessage 药物的一部分,我应该在调用 findErr 方法之前添加另一个 if 条件
  • @hussain 在findError 中通知data && data.some 如果您的item.mailPrice.rejectMessage 是虚假值,则它不会是data.some 部分
  • 对不起,我知道了
  • 所以您认为这是达到预期结果的最佳方法,或者我们可以做得更好
  • @hussain 可以改进的一件事是使用objectSet 而不是rejectMessagerrors 的数组,因此无需循环检查值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2012-03-22
  • 2015-09-09
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多