Вернуть true / false для коллекции сопоставленных значений true или false - PullRequest
0 голосов
/ 21 января 2019

У меня есть массив (называемый acceptedGrades) принятых "оценок". Мой json возвращает оценку для каждого человека. Эта оценка должна быть в массиве acceptedGrades, чтобы возвращать значение true, если нет, оно возвращает значение false. Пример:

acceptedGrades = ['A1','A2','A3','B1','B2','B3','C1','C2','C3'];

for "A1" returns true;
for "Z1" returns false;

Следующий код ищет это, чтобы решить, является ли оно истинным или ложным.

data.map((item) => {
    this.state.isValidGrade = acceptedGrades.includes(item.grade.toUpperCase());
});

Теперь проблема в том, что я хочу знать, возвращает ли ВСЕ элементы значение true или кто-то возвращает false, например,

0:grade: 'B1' //true
1:grade: 'C2' //true
2:grade: 'A3' //true
// All return TRUE so expected result should be TRUE

0:grade: 'B11' //false
1:grade: 'C2' //true
2:grade: 'A3' //true
// Not All return TRUE so the expected result should be FALSE

Возможно, я обойду это неправильно и считаю, что есть более простой способ рассматривать все значения оценки как совокупность по массиву acceptedGrades, а не рассматривать каждого отдельного человека - какие-либо предложения или ответы?

1 Ответ

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

Вы можете обернуть логику внутри метода и фактически проверить, можете ли вы найти grade, который не включен в набор действительных оценок, если вы найдете какой-либо элемент, проверяющий это условие, вы будете знать весь массив элементов не будет действительным:

const acceptedGrades = ['A1','A2','A3','B1','B2','B3','C1','C2','C3'];

// Data examples.

const data1 = [
    {name: "Josh", grade: "B1"},
    {name: "Lucas", grade: "C2"},
    {name: "Damian", grade: "A3"}
];

const data2 = [
    {name: "Josh", grade: "B11"},
    {name: "Lucas", grade: "C2"},
    {name: "Damian", grade: "A3"}
];

// Method that return if a set of grades is valid or not.

const isValidGrade = (data) =>
{
    return !data.find(({grade}) => !acceptedGrades.includes(grade.toUpperCase()));
};

console.log(isValidGrade(data1));
console.log(isValidGrade(data2));

Однако было бы более понятно, если вы используете every():

const isValidGrade = (data) =>
{
    return data.every(({grade}) => acceptedGrades.includes(grade.toUpperCase()));
};
...