jquery 数组判断-JavaScript Array.forEach() 教程 – 如何遍历链表中的元素

在 JavaScript 中,您经常需要迭代字段集合并为每次迭代执行反弹技术。 JS 开发人员通常使用一种有用的方法来执行此操作:forEach() 方法。

forEach() 方法为它在链表中迭代的每个元素调用一次指定的回调函数。 就像其他链表迭代器(例如map和filter)一样,回调函数可以接受三个参数:

forEach 方法不会像其他迭代器(例如过滤器、映射和排序)那样返回新字段。 相反,该方法返回未定义本身。 所以它不能像其他方式那样链接。

forEach 的另一点是您不能中止循环(使用break 语句),或使其跳过迭代(使用Continue 语句)。 换句话说,你无法控制它。

终止 forEach 循环的唯一方法是在回调函数中抛出异常。 别担心,我们很快就会在实践中再次看到这一切。

如何在 JavaScript 中使用 forEach() 方法

想象一下一群中学生正在排队进行例行点名。 班级协调员走过队伍,喊出每个中学生的名字并标记他们的存在。

需要注意的是,协调员不会改变中学生在排中的顺序。 点名结束后,他还让他们保持在同一条线上。 他所做的就是对每个人执行一个动作(他的检测)。

在下面的示例中,牢记这种情况,我们将了解如何使用 JavaScript 中的 forEach 方法来解决实际问题。

JavaScript 中的 forEach() 方法示例 如何使用 forEach() 删除链表中的第一个素数

在本例中jquery 数组判断,我们有一个字段,第一个位置有一个素数,后面是合数。 但我们只希望该字段中的数字为奇数。 因此,我们将使用 forEach() 循环从链表中删除素数:

let numbers = [3, 6, 8, 10, 12]
let odd = 3;
numbers.forEach(function(number) {
    if (number === odd) {
        numbers.shift() // 3 will be deleted from array
    }
})
console.log(numbers);
[6, 8, 10, 12] // All even!

如何使用 forEach() 访问索引属性

在这个例子中,我们将为链表中循环的每个中学生执行 rollCall 函数。 rollCall 函数只是将与每个中学生相关的字符串记录到控制台。

names = ["anna", "beth", "chris", "daniel", "ethan"]
function rollCall(name, index) {
    console.log(`Is the number ${index + 1} student - ${name} present? Yes!`)
    ;}
names.forEach((name, index) => rollCall(name, index));
/*
"Is the number 1 student - anna present? Yes!"
"Is the number 2 student - beth present? Yes!"
"Is the number 3 student - chris present? Yes!"
"Is the number 4 student - daniel present? Yes!"
"Is the number 5 student - ethan present? Yes!"
*/

在这个例子中,我们掌握的关于每个中学生的唯一信息是他们的名字。 然而,我们也想知道每个中学生使用哪些动词。 换句话说,我们要为每个中学生定义一个动词属性。

因此我们将每个中学生定义为一个具有两个属性的对象:名字和动词:

names = [
    {name:"anna",pronoun: "she"},
    {name: "beth",pronoun: "they"},
    {name: "chris",pronoun: "he"},
    {name: "daniel",pronoun: "he"},
    {name: "ethan",pronoun: "he"}
]
function rollCall(student, index) {
    console.log(`The number ${index + 1} student is ${student.name}. Is ${student.pronoun} present? Yes!`);
}
names.forEach((name, index) => rollCall(name, index));
/*
"The number 1 student is anna. Is she present? Yes!"
"The number 2 student is beth. Is they present? Yes!"
"The number 3 student is chris. Is he present? Yes!"
"The number 4 student is daniel. Is he present? Yes!"
"The number 5 student is ethan. Is he present? Yes!"
*/

我们将每个中学生的点名消息记录到控制台,然后执行检测以查看中学生正在使用哪些动词,最后我们将确切的动词作为字符串的一部分动态传递。

如何在 JavaScript 中使用 forEach() 将字段复制到新字段

经过两年的学习,每个中学生都到了毕业的时候了。 在 JavaScript 代码中,我们定义了两个字段:stillStudent 和 nowGraduated。 你可能已经猜到了jquery 数组判断,直到中学生毕业,它仍然是学生。

然后,forEach 循环获取每个中学生并调用其上的graduateStudent 函数。

数组判断最大最小值_jquery 数组判断_数组判断是否重复

在此函数中,我们构造一个具有两个属性的对象:学生的姓名和毕业地点。 然后我们将新对象传递给 nowGraduated 数组。 那时,学生们已经毕业了。

此示例还演示了如何使用 forEach() 方法将字段复制到新字段中。

let stillStudent = ["anna", "beth", "chris", "daniel", "ethan"]
let nowGraduated = []
function graduateStudent(student, index) {
    let object = { name: student, position: index + 1}
    nowGraduated[index] = object
}
stillStudent.forEach((name, index) => graduateStudent(name, index));
console.log(nowGraduated);
/*
[
    { name: "anna", position: 1}, 
    { name: "beth", position: 2}, 
    { name: "chris", position: 3}, 
    { name: "daniel", position: 4}, 
    { name: "ethan", position: 5}]
]
*/

如何使用链表参数检测链表中的下一项

有时,老师需要检查列表中是否有下一个特定项目。 在这些情况下,教师需要对整个列表有广泛的了解。 这样他就可以确定是否有下一个中学生需要被叫到。

在我们的 JavaScript 代码中,我们可以复制这一点,因为回调函数还可以访问链表(第三个)参数。 该参数代表目标链表,即名称。

我们检查链表中是否有下一个项目(学生)。 如果是这样,我们将字符串 Positive 传递给 nextItem 变量。 如果不是,我们将字符串负数传递给变量。 然后,对于每次迭代,我们检查中学生是否确实是最后一个。

names = ["anna", "beth", "chris", "daniel", "ethan"]
function rollCall(name, index, array) {
    let nextItem = index + 1  rollCall(name, index, array))
/*
"Is the number 1 student - anna present? Yes!. Is there a next student? postive!"
"Is the number 2 student - beth present? Yes!. Is there a next student? postive!"
"Is the number 3 student - chris present? Yes!. Is there a next student? postive!"
"Is the number 4 student - daniel present? Yes!. Is there a next student? postive!"
"Is the number 5 student - ethan present? Yes!. Is there a next student? negative!"
*/

您无法退出 forEach 循环,因此请使用 every() 代替

还记得我提到过,从本质上讲,您无法跳出(即退出)forEach 循环吗? 一旦启动,它仍然会运行,直到到达链表中的最后一项。 所以如果你插入一个break语句,它将返回一个SyntaxError:

let numbers = [2, 4, 5, 8, 12]
let odd = 5;
numbers.forEach(function(number) {
    if (number === odd) {
        break; // oops, this isn't gonna work!
    }
})

通常,如果您在到达最后一个项目之前最终实现了想要实现的目标,那么您希望跳出循环。 在前面的示例中,我们已经找到了素数 (5),因此我们不需要继续迭代剩余的项(8 和 12)。

如果要在个别条件下跳出循环,则必须使用以下任一方法:

数组判断最大最小值_数组判断是否重复_jquery 数组判断

以下是如何使用 Array.every() 跳出循环:

let numbers = [2, 4, 5, 8, 12]
let odd = 5;
numbers.every(number => {
  if (number == odd) {
    return false;
  }
  console.log(number);
  
  return true;
});
// 2 4

总结

在本教程中,我介绍了 forEach 方法,通过一个简单的类比解释了它的工作原理,并提供了一些在 JavaScript 代码中使用它的实际示例。

希望你能从这篇文章中得到一些有用的东西。

如果您想了解更多有关 Web 开发的知识,请随时访问我的博客。

感谢您阅读这篇文章!

P/S:如果您正在学习 JavaScript,我已经创建了一本包含 50 个 JavaScript 主题和手绘数字笔记的电子书。 在这里查看一下。