为映射的true或false值的集合返回true/false



我有一个可接受的"等级"数组(称为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数组的集合来查看,而不是查看每个人——有什么建议或答案吗?

您可以将逻辑封装在一个方法中,并实际检查是否可以找到一个未包含在有效等级集中的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()));
};

最新更新