JS рекурсивно проверяет поля объекта (+ вложенные) на ложь / истина - PullRequest
0 голосов
/ 29 января 2019

У меня есть такой объект:

const data = {
    name: 'somename',
    valid: true,
    childs: [{
        name: 'somename',
        valid: true
    }, {
        name: 'somename',
        valid: true,
        childs: [{
            name: 'somename',
            valid: true,
            childs: [{
                name: 'somename',
                valid: false
            }]
        }]
    }]
};

, и я пытаюсь найти лучший способ проверить, установлены ли все значения ключей valid в true.Мой объект непредсказуем по вложенному пределу =>, поэтому я думаю, что это хорошая идея для рекурсии.

Но я застрял: если мне нужно будет собирать числа или что-то еще: это легко сделать, но как быть сзначения true / false?

Я начал так ...

checkTrueFalse = (data) => {
    return ctrl.checkTrueFalseItems(data);
};

checkTrueFalseItems = (dataItem) => {
    return dataItem.filter(item => item.enabled).length === dataItem.length;
};

Какой лучший способ проверить, установлены ли все поля valid моих данных в true / false?В случае, если все 'допустимые' поля имеют значение true => результат должен быть истинным, если нет => false.

1 Ответ

0 голосов
/ 29 января 2019

Простой цикл рекурсии по потомкам - это то, что вам нужно сделать.Использование every () облегчает получение логического значения.

const data = {
    name: 'somename',
    valid: true,
    childs: [{
        name: 'somename',
        valid: true
    }, {
        name: 'somename',
        valid: true,
        childs: [{
            name: 'somename',
            valid: true,
            childs: [{
                name: 'somename',
                valid: false
            }]
        }]
    }]
};

const checkIfAllTrue = obj => {
  return obj.valid && (!obj.childs || obj.childs.every(checkIfAllTrue))
}

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