我有以下数组,并创建了一个函数来根据传递的过滤器从数组返回项目。
var students = [
//name grade room gender
["name1", 80, "Farabi", "K"],
["name2", 73, "B1", "K"],
["name3", 73, "B1", "K"],
["name4", 60, "Farabi", "K"],
["name5", 80, "B1", "E"],
["name6", 43, "Farabi", "E"],
];
function getGrades() {
var grades = [];
for (var i = 0; i < students.length; i++) {
if (students[i][arguments[0][1]] == arguments[0][0]) {
grades.push(students[i][1]);
}
}
return grades;
}
getGrades(["E", 3]); // [gender, column index]
只要我通过一个过滤器,这就有效。如果我想传递两个过滤器,例如 getGrades(["E", 3], ["B1", 2])
它将不起作用。
我需要一种方法来根据传递的参数配置(扩展)if 条件students[i][arguments[0][1]] == argument[0][0]
。
对于 getGrades(["E", 3], ["B1", 2])
,if 条件应为
students[i][arguments[0][1]] == arguments[0][0] && students[i][arguments[1][1]] == arguments[1][0]
如何动态创建 if 条件?
最佳答案
您可以迭代每个参数并单独检查它们,而不是尝试动态创建 if
条件。如果其中一个失败,那么他们都会失败。同样,如果没有一个失败,您就知道总结果是有效的。
for (var i = 0; i < students.length; i++) {
var student = students[i];
var matched = true; // This won't change if all of the conditions pass
for (var j = 0; j < arguments.length; j++) {
var filter = arguments[j];
if (student[filter[1]] !== filter[0]) {
matched = false; // One of the conditions failed, don't check the rest
break;
}
}
if (matched) {
grades.push(student[1]);
}
}
关于javascript - 动态创建 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36779832/