несколько циклов для проверки логических значений в javascript - PullRequest
2 голосов
/ 18 июня 2020

У меня есть кнопка, которая скрыта до тех пор, пока условие не станет истинным

, чтобы проверить это, он должен просмотреть список (someList), чтобы найти любые элементы, для которых есть потребности.Approval: true

затем он проверяет другой массив элементов (данных), чтобы узнать, активны ли они

если все активно, мы можем показать кнопку

есть ли лучший способ, более современный способ сделать это без нескольких циклов кажется очень неэффективным?

const someList = [
    { id: 1, sid: 'a', needsApproval: true},
    { id: 2, sid: 'b',  needsApproval: true},
    { id: 3, sid: 'c',  needsApproval: false},
  { id: 4, sid: 'd',  needsApproval: false}
]

const data = [
    { id: 1, sid: 'a', active: true},
    { id: 2, sid: 'b', active: false},
]


    const needsApproval = someList.filter(x => x.needsApproval === true)
    needsApproval.forEach(a => {
        const found = data.find(s => s.sid === a.sid)
        if (found && found.active === false) return false
    })

    return true

1 Ответ

1 голос
/ 18 июня 2020

Вы возвращаете false из функции обратного вызова forEach, а не из checkButton. forEach ничего не делает с возвращаемыми значениями своей функции. Таким образом, ваша функция checkButton() всегда возвращает true.

Вы можете использовать every(), чтобы проверить, выполняется ли условие для всех элементов массива.

const someList = [
    { id: 1, sid: 'a', needsApproval: true},
    { id: 2, sid: 'b',  needsApproval: true},
    { id: 3, sid: 'c',  needsApproval: false},
  { id: 4, sid: 'd',  needsApproval: false}
]

const data = [
    { id: 1, sid: 'a', active: true},
    { id: 2, sid: 'b', active: false},
]

const checkButton = () => {
  const needsApproval = someList.filter(x => x.needsApproval === true);
  return needsApproval.every(a => {
    const found = data.find(x => x.sid === a.sid);
    return !(found && found.active === false);
  });
}

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