Вы хотите вернуть true
, если для любого заданного элемента в массиве элемент имеет:
- Как минимум одну комбинацию из "Y", "Y"
- По крайней мере, еще одна комбинация
Ваша проблема в том, что ваш счетчик работает от начала до конца внешнего массива. Вместо этого вы должны переместить объявления внутри первого for
l oop.
В качестве альтернативы, вы можете немного упростить это, используя функцию массива some
для ваших циклов.
validateOrderRequest(rxDetails) {
return rxDetails.some(member => {
let firstFillCounter = 0;
let refillCounter = 0;
for (let i = 0; i < member.rxInfos.length; i++) {
const rx = member.rxInfos[i];
if (rx.firstFillIndicator === "Y" &&
rx.acceptDigitalFirstFill === "Y") {
firstFillCounter++;
} else {
refillCounter++;
}
if (firstFillCounter > 0 && refillCounter > 0) {
return true;
}
}
return false;
});
}
some
вернет true для первого элемента, который он найдет для условия в обратном вызове.
В этом примере внутренний l oop возвращает true
, если у члена есть хотя бы один " Y "," Y "комбинация и хотя бы одна!" Y ",!" Y "комбинация.
Внешний some
возвращает true, если хотя бы один член удовлетворяет этому условию.
ДЕМО: https://stackblitz.com/edit/angular-read7t