Как удалить элемент из массива, используя Reduce? - PullRequest
0 голосов
/ 18 февраля 2020

Попытка отфильтровать объект на основе некоторой логики c приведенный ниже код возвращает пустой массив, любая помощь будет оценена, если вы попытаетесь добиться следующей логики c

1 - Если первый Obj (firstFillIndicator = Y, acceptDigitalFirstFill = Y) и Второй объект (firstFillIndicator = Y, acceptDigitalFirstFill = N). этот объект должен быть удален как ложный.

2 - если первый объект obj (firstFillIndicator = Y, acceptDigitalFirstFill = Y) и объект seond (firstFillIndicator = N, acceptDigitalFirstFill = Y). этот объект должен быть удален как ложный.

3 - если оба объекта имеют firstFillIndicator и acceptDigitalFirstFill имеют некоторые значения, которые были бы правдивыми.

main.ts

function validateSingleOrder(data){
  let isValid = false;
  const filteredDrugs = data.filter((item) => {
      isValid = isValidOrder(item);
      if(isValid){
        return true;
      } else {
        return false;
      }
  })

 return filteredDrugs;
}

function isValidOrder(item){
   item.rxInfos.reduce((a, c) => {
    return (a.acceptDigitalFirstFill === "Y" && c.firstFillIndicator === "Y") || (a.firstFillIndicator === "N" && c.acceptDigitalFirstFill === "N")
  });
}

console.log(validateSingleOrder(rxDetails));

data

 const rxDetails = [
      {
            indexID: 1,
            rxInfos: [{
                    firstFillIndicator: "Y",
                    acceptDigitalFirstFill: "Y",
                    rxNumber: "1512"
                },
                {
                    firstFillIndicator: "Y",
                    acceptDigitalFirstFill: "N",
                    rxNumber: "16021"

                }
            ]
      },
      {
          indexID: 2,
          rxInfos: [{
                  firstFillIndicator: "Y",
                  acceptDigitalFirstFill: "Y",
                  rxNumber: "1512"
              },
              {
                  firstFillIndicator: "N",
                  acceptDigitalFirstFill: "Y",
                  rxNumber: "16021"

              }
          ]
      },
      {
          indexID: 3,
          rxInfos: [{
                  firstFillIndicator: "Y",
                  acceptDigitalFirstFill: "Y",
                  rxNumber: "1512"
              },
              {
                  firstFillIndicator: "N",
                  acceptDigitalFirstFill: "N",
                  rxNumber: "16021"

              }
          ]
      }
    ]

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

[{
        indexID: 3
        rxInfoss: [{
                firstFillIndicator: "Y",
                acceptDigitalFirstFill: "Y",
                rxNumber: "1512"
            },
            {
                firstFillIndicator: "N",
                acceptDigitalFirstFill: "N",
                rxNumber: "16021"

            }
        ]
    },

];

1 Ответ

1 голос
/ 18 февраля 2020

Проблема в том, что функция isValidOrder ничего не возвращает, в любом случае, использование чего-то вроде .every(..) более целесообразно, чем использование .reduce(..), в данном случае, вот пример:

const rxDetails = [{
    indexID: 1,
    rxInfos: [{
        firstFillIndicator: "Y",
        acceptDigitalFirstFill: "Y",
        rxNumber: "1512"
      },
      {
        firstFillIndicator: "Y",
        acceptDigitalFirstFill: "N",
        rxNumber: "16021"

      }
    ]
  },
  {
    indexID: 2,
    rxInfos: [{
        firstFillIndicator: "Y",
        acceptDigitalFirstFill: "Y",
        rxNumber: "1512"
      },
      {
        firstFillIndicator: "N",
        acceptDigitalFirstFill: "Y",
        rxNumber: "16021"

      }
    ]
  },
  {
    indexID: 3,
    rxInfos: [{
        firstFillIndicator: "Y",
        acceptDigitalFirstFill: "Y",
        rxNumber: "1512"
      },
      {
        firstFillIndicator: "N",
        acceptDigitalFirstFill: "N",
        rxNumber: "16021"

      }
    ]
  }
];


const result = rxDetails.filter(o => {
  return o.rxInfos.every(v => {
    return (v.firstFillIndicator === 'Y' && v.acceptDigitalFirstFill === 'Y') || (v.firstFillIndicator === 'N' && v.acceptDigitalFirstFill === 'N');
  });
});

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