【问题标题】:How to use a boolean to check if a condition was properly met in a for loop?如何使用布尔值检查 for 循环中是否正确满足条件?
【发布时间】:2019-10-23 03:38:58
【问题描述】:

我希望出现一条提示消息,要求用户输入学生姓名。 Javascript 会查看单独的 JS 文件中的学生记录,然后在 message 变量中输出学生的信息。

这里是相关的javascript代码:

var students=[
    {
        name:'Chris',
        track:'IOS',
        achievements:'100',
        points:'1000'
    },
    {
        name:'John',
        track:'Web Design',
        achievements:'90',
        points:'1000'
    },
    {
        name:'Brent',
        track:'Front-End',
        achievements:'70',
        points:'1000'
    },
    {
        name:'Josh',
        track:'Full-Stack',
        achievements:80,
        points:'1000'
    },
    {
        name:'Nick',
        track:'AI',
        achievements:'60',
        points:'1000'
    }
];

function print(message) {
    document.write(message);
}
var message="";
var flag=false;
var search=prompt("Type name of student. Type 'quit' to exit.");
while (search!=="quit") {
    for (var i=0; i<students.length; i+=1) {
    var studentName=students[i].name;
        if (studentName===search) {
            flag=true;
            break;
        } 
    }
    if (flag) {
        message+="<h1>"+studentName+"</h1>";
        message+="<p>"+students[i].track+"</p>";
        message+="<p>"+students[i].achievements+"</p>";
        message+="<p>"+students[i].points+"</p>";
    } else {
        alert("That student does not exist. Try again");
        search=prompt("Type name of student");
    }
}
print(message);

我意识到我很接近,但是,我尝试从 for 循环中访问的任何变量都将仅在该循环中是本地的。那么,如果我无法在条件句中访问本地 for 循环变量,我的 if 和 else 条件将如何工作?我只是希望它找到匹配项,一旦找到匹配项,停止 for 循环,然后继续使用该特定元素索引。

【问题讨论】:

  • 所以在外面声明...你最好使用数组find()
  • 从您当前的代码看来,如果找到匹配项,您希望继续提示用户寻找另一个学生。这就是你想要做的吗?

标签: javascript arrays object boolean


【解决方案1】:

我会放弃循环并改用find()。这将返回找到的学生对象,如果找不到学生,则返回 undefined

let student = students.find(s => s.name == search)

然后我们可以将代码放在一个递归函数中,该函数会一直调用自身,直到用户找到学生或输入quit

var students = [{
    name: 'Chris',
    track: 'IOS',
    achievements: '100',
    points: '1000'
  },
  {
    name: 'John',
    track: 'Web Design',
    achievements: '90',
    points: '1000'
  },
  {
    name: 'Brent',
    track: 'Front-End',
    achievements: '70',
    points: '1000'
  },
  {
    name: 'Josh',
    track: 'Full-Stack',
    achievements: 80,
    points: '1000'
  },
  {
    name: 'Nick',
    track: 'AI',
    achievements: '60',
    points: '1000'
  }
];

function findStudent() {
  let search = prompt("Type name of student. Type 'quit' to exit.");
  // Exit the function if the user types 'quit'
  if (search == 'quit') return
  // Find the student
  let student = students.find(s => s.name == search)
  let message = "";
  // If the student was found, write to the document
  if (student) {
    message += "<h1>" + student.name + "</h1>";
    message += "<p>Track: " + student.track + "</p>";
    message += "<p>Achievements: " + student.achievements + "</p>";
    message += "<p>Points: " + student.points + "</p>";
    document.body.innerHTML = message
  }
  // The student was not found
  // Let the user know and call the function again
  else {
    alert("That student does not exist. Try again");
    findStudent()
  }
}

findStudent()

【讨论】:

    【解决方案2】:

    这个怎么样?

    var students = [...];
    
    function format(student) {
      return (
        '<h1>' + student.name + '</h1>' +
        '<p>' + student.track + '</p>' +
        '<p>' + student.achievements + '</p>' +
        '<p>' + student.points + '</p>'
      );
    }
    
    function lookup(name) {
      return students.find(function(student) {
        return name === student.name
      });
    }
    
    function print(message) {
      document.write(message);
    }
    
    function searchPrompt() {
      return prompt("Type name of student. Type 'quit' to exit.");
    }
    
    function run() {
      var search = searchPrompt();
    
      if (search === 'quit') {
        return;
      }
    
      var student = lookup(search);
    
      if (student) {
        print(format(student));
      } else {
        alert("That student does not exist. Try again");
        run();
      }
    }
    
    run();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2022-06-13
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多