javascript - 动态创建 if 条件

标签 javascript if-statement arguments conditional-statements

我有以下数组,并创建了一个函数来根据传递的过滤器从数组返回项目。

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/

相关文章:

Javascript 正则表达式在最后一个反斜杠之前提取字符串

javascript - jQuery ui 幻灯片无法正常工作

javascript - 有没有办法改进算法?

Python累积条件逻辑

javascript - Javascript 中参数和参数之间的联系是什么?

javascript - 删除属性 CSS DOM JS

c++ - 设计一个可以在 if 语句中测试的类?

python - 如何测试多个变量与单个值的相等性?

Javascript 函数只看到作为参数传入的全局变量的默认值

python - 是否有更 pythonic 的方式来分解函数参数的列表?