原生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日

相关文章

  • jQWidgets jqxComboBox checkboxes属性

    jQWidgets 的 jqxComboBox 组件提供了 checkboxes 属性,用于在下拉列表中添加复选框。本文将详细介绍 checkboxes 属性的使用方法,包括概述、示以及注意事项。 checkboxes 属性概述 checkboxes 属性用于在下拉列表中添加复选框。该属性是一个布值,当设置为 true 时,将在下拉列表中添加复选框。 che…

    jquery 2023年5月11日
    00
  • jQuery中的一些小技巧

    jQuery中的一些小技巧 一、选择器优化 jQuery选择器是我们经常使用的东西,不过有时候由于选择器的复杂度,会影响到页面的性能。我们可以通过一些技巧来优化选择器,提升页面性能。 1. 尽量使用id选择器 因为id具有唯一性,而且浏览器查找id元素的效率比其他选择器要高。 例如: // 使用id选择器 $(‘#myId’) 2. 不建议使用*选择器 因为…

    jquery 2023年5月27日
    00
  • javascript中正则表达式语法详解

    下面是对“JavaScript中正则表达式语法详解”的完整攻略。 JavaScript中正则表达式语法详解 什么是正则表达式 正则表达式是一种用于匹配字符串中模式的表达式。使用正则表达式可以进行字符串搜索、替换、提取等操作。在JavaScript中,可以通过RegExp对象表示正则表达式。 创建正则表达式 可以通过两种方式创建正则表达式:使用字面量、使用Re…

    jquery 2023年5月28日
    00
  • jQWidgets jqxRangeSelector getRange()方法

    以下是关于 jQWidgets jqxRangeSelector 组件中 getRange() 方法的详细攻略。 jQWidgets jqxRangeSelector getRange() 方法 jQWidgets jqxRangeSelector getRange() 方法用于获取选择器的当前范围。 语法 // 获取选择器的当前范围 var range =…

    jquery 2023年5月12日
    00
  • jQuery中阻止冒泡事件的方法介绍

    当一个元素触发了某个事件时,这个事件会冒泡到该元素的父元素,再到父元素的父元素,层层向上传播。有时候,我们需要阻止事件冒泡以避免不必要的影响,这时候就需要使用阻止冒泡事件的方法。下面是jQuery中阻止冒泡事件的方法介绍: 方法一:event.stopPropagation() event.stopPropagation()是最常用的阻止冒泡事件的方法。使用…

    jquery 2023年5月28日
    00
  • jQuery获取Select选择的Text和Value(详细汇总)

    下面我将为您详细讲解“jQuery获取Select选择的Text和Value(详细汇总)”的攻略。 背景介绍 在网页开发过程中,我们经常需要获取下拉框(Select)选择的值,这时就需要用到jQuery获取Select选择的Text和Value的方法。 获取Select选择的Text 要获取Select选择的Text,可以使用 .text() 方法,该方法获…

    jquery 2023年5月28日
    00
  • jQWidgets jqxLayout unpin Event

    jQWidgets jqxLayout unpin Event攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建代化应程序。jqxLayout组用灵的布局,可用于构建复杂的用户界面。本攻略将详细介绍 jqxLayout 的 unpin 事件,包括如何使用和示例说明。 使用 jqxLayout …

    jquery 2023年5月10日
    00
  • 用js实现随机返回数组的一个元素

    请问这个问题是要讲解如何用JavaScript实现随机返回数组的一个元素吗?如果是的话,下面是标准的markdown格式方式回答你的问题。 用JS实现随机返回数组的一个元素的攻略 我们可以使用JS来随机返回数组的一个元素。具体步骤如下: 获取数组。 我们首先需要声明一个数组,或者获取一个已有数组,作为我们随机获取元素的源数组。 javascript cons…

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