原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作

原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作

forEach 和 map 的区别

forEach

forEach 是 Array 对象自带的方法,用于遍历数组中的每一项。语法:

Array.prototype.forEach(callback[, thisArg])

callback 函数在数组的每一项上执行一次,它接收三个参数:

  • currentValue:当前项的值
  • index:当前项的索引
  • array:正在被遍历的数组

thisArg 是可选的,表示在调用 callback 函数时,用作 this 的对象。

forEach 无法终止循环,它会遍历数组中的每一项执行回调函数,不像 forwhiledo...while 等语句可以在满足条件时跳出循环。

下面是一个 forEach 的示例:

let arr = [1, 2, 3, 4, 5]
arr.forEach((value, index, array) => {
  console.log(value, index, array)
})

输出结果:

1 0 [ 1, 2, 3, 4, 5 ]
2 1 [ 1, 2, 3, 4, 5 ]
3 2 [ 1, 2, 3, 4, 5 ]
4 3 [ 1, 2, 3, 4, 5 ]
5 4 [ 1, 2, 3, 4, 5 ]

map

map 方法也是 Array 对象自带的方法,用于遍历数组中的每一项,并在每一项上执行回调函数。语法:

Array.prototype.map(callback[, thisArg])

callback 函数在数组的每一项上执行一次,它接收三个参数:

  • currentValue:当前项的值
  • index:当前项的索引
  • array:正在被遍历的数组

thisArg 是可选的,表示在调用 callback 函数时,用作 this 的对象。

map 方法的回调函数必须返回一个值,否则会得到一个数组元素值为 undefined 的新数组。

下面是一个 map 的示例:

let arr = [1, 2, 3, 4, 5]
let new_arr = arr.map((value, index, array) => value * value)
console.log(new_arr)

输出结果:

[ 1, 4, 9, 16, 25 ]

forEach 和 map 兼容性写法

由于 forEachmap 仅支持主流的现代浏览器,对于一些老旧的浏览器还需要进行兼容性写法。

我们可以使用 for 循环来模拟 forEachmap 的功能,下面是具体的实现:

forEach 兼容性写法

if (!Array.prototype.forEach) {
  Array.prototype.forEach = function (callback, thisArg) {
    let T, k
    if (this == null) {
      throw new TypeError('this is null or not defined')
    }
    let O = Object(this)
    let len = O.length >>> 0
    if (Object.prototype.toString.call(callback) !== '[object Function]') {
      throw new TypeError(callback + ' is not a function')
    }
    if (arguments.length > 1) {
      T = thisArg
    }
    k = 0
    while (k < len) {
      let kValue
      if (k in O) {
        kValue = O[k]
        callback.call(T, kValue, k, O)
      }
      k++
    }
  }
}

map 兼容性写法

if (!Array.prototype.map) {
  Array.prototype.map = function (callback, thisArg) {
    let T, A, k
    if (this == null) {
      throw new TypeError('this is null or not defined')
    }
    let O = Object(this)
    let len = O.length >>> 0
    if (Object.prototype.toString.call(callback) !== '[object Function]') {
      throw new TypeError(callback + ' is not a function')
    }
    A = new Array(len)
    k = 0
    while (k < len) {
      let kValue, mappedValue
      if (k in O) {
        kValue = O[k]
        mappedValue = callback.call(T, kValue, k, O)
        A[k] = mappedValue
      }
      k++
    }
    return A
  }
}

jQuery $.each 和 $.map 遍历操作

jQuery 提供了两个方法 $.each$.map 用于遍历元素和对象。

$.each

jQuery 的 $.each 方法用于遍历数组、对象和类数组对象,语法如下:

jQuery.each(collection, callback(indexInArray, valueOfElement))
  • collection:要遍历的数组、对象和类数组对象。
  • callback:在每个元素上执行的回调函数。回调函数返回 false 可以提前停止循环。

下面是一个 $.each 方法的示例:

let arr = [1, 2, 3, 4, 5]
$.each(arr, (index, value) => {
  console.log(index, value)
})

输出结果:

0 1
1 2
2 3
3 4
4 5

$.map

jQuery 的 $.map 方法用于遍历数组、对象和类数组对象,并可实现遍历后对数据的修改。语法如下:

jQuery.map(array, callback(elementOfArray, indexInArray))
  • array:要遍历的数组、对象和类数组对象。
  • callback:在每个元素上执行的回调函数。回调函数必须返回一个值。

下面是一个 $.map 方法的示例:

let arr = [1, 2, 3, 4, 5]
let new_arr = $.map(arr, (value, index) => value * value)
console.log(new_arr)

输出结果:

[ 1, 4, 9, 16, 25 ]

总结

  • forEach 只是用于遍历数组,而 map 遍历数组并对数组执行操作。两者返回的值不同。
  • 老浏览器不支持 forEachmap,我们需要手动实现它们的功能。
  • $.each 可以用来循环遍历对象、数组、类数组,同时支持 jQuery 对象; $.map 可以用来处理数据并返回一个新数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JQuery仿小米手机抢购页面倒计时效果

    下面我来详细讲解“JQuery仿小米手机抢购页面倒计时效果”的完整攻略: 前置要求 在开始实现倒计时效果之前,需要确保以下前置要求已经满足: 需要引入 jQuery 库,可以通过以下链接引入: <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js&q…

    jquery 2023年5月28日
    00
  • js 自动播放的实例代码

    下面是关于JS自动播放的实例代码的攻略。 什么是JS自动播放? JS自动播放通常指网页上的轮播图、视频以及幻灯片等元素自动播放,用户可以通过点击按钮、鼠标移入移出等操作来控制播放、暂停以及跳转。在网页设计中,JS自动播放是一个非常常见的功能。 实现JS自动播放的步骤 步骤一:编写HTML结构 首先需要编写HTML结构,例如: <div class=&q…

    jquery 2023年5月28日
    00
  • jQuery中remove()方法用法实例

    当你需要从DOM中删除一个元素时,jQuery的remove()方法会变得非常有用。本文将为你提供一个完整的攻略,详细讲解remove()方法的用法、参数和示例,帮助你更好地掌握这一强大的方法。 一、remove()方法的用法 remove()方法是jQuery提供的用于删除DOM元素的方法。它可以删除匹配的元素以及它们的子元素。下面是remove()方法的…

    jquery 2023年5月28日
    00
  • jQWidgets jqxInput val() 方法

    jqxInput 是 jQWidgets 提供的一种输入框控件,用于在 Web 应用程序中创建输入框。val() 方法是 jqxInput 控件一个方法,用于获取或设置输入框的值。以下是 jqxInput 的 val() 方法的详细说明: 方法 val() 方法于获取或设置输入框的值。 // 获取 jqxInput 控件的值 var value = $(&q…

    jquery 2023年5月10日
    00
  • jquery $.each 和for怎么跳出循环终止本次循环

    对于jquery中的 $.each 和原生的for循环,跳出循环或者终止本次循环的方法略有不同。 1. jquery $.each $.each 是jquery中用于遍历数组和对象的方法,它的基本用法如下: $.each(arrayOrObject, function(index, value){ // 条目处理逻辑 }); 其中,arrayOrObject…

    jquery 2023年5月28日
    00
  • jquery 新手学习常见问题解决方法

    jQuery新手学习常见问题解决方法 学习jQuery的过程中,常会遇到一些问题。本文将探讨一些常见的jQuery问题及解决方法。 问题1:jQuery代码不起作用 当你按照教程书写代码,但好像并没有起作用,这时候可以尝试以下步骤: 检查jQuery是否已正确引入,可以在控制台输入 $ 查看是否可以调用jQuery库。 检查代码中是否有错误,可以使用浏览器控…

    jquery 2023年5月28日
    00
  • jQWidgets jqxNavigationBar showArrow属性

    以下是关于 jQWidgets jqxNavigationBar 组件中 showArrow 属性的详细攻略。 jQWidgets jqxNavigationBar showArrow 属性 jQWidgets jqxNavigationBar 的 showArrow 属性用于设置导航栏项是否显示箭头。 语法 // 设置导航栏项是否显示箭头 $(‘#navi…

    jquery 2023年5月12日
    00
  • ajax 提交数据到后台jsp页面及页面跳转问题

    针对这个问题,这里提供一套完整的解决方案。步骤如下: 步骤一:创建一个可以响应Ajax请求的JSP页面 首先,我们需要创建一个可以响应Ajax请求的JSP页面。这个页面将会接收前端传来的数据,并进行相应的处理,最后将结果返回给前端。下面是一个简单的示例代码: <%@ page language="java" contentType=…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部