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

news/2024/7/11 0:02:14 标签: jquery, 遍历, 数组, js, 方法

js-foreach和map遍历">一、原生JS forEach()和map()遍历

共同点:

1.都是循环遍历数组中的每一项。

2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。

3.匿名函数中的this都是指Window。

4.只能遍历数组

1.forEach()

没有返回值。

js php">arr[].js-keyword">forEach(js-function">js-keyword">functionjs-params">(value,index,array){

  js-comment">//do something

})

参数:value数组中的当前项,必选项;index当前项的索引,可选项;array原始数组,可选项;
数组中有几项,那么传递进去的匿名回调函数就需要执行几次;
理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;
但是可以自己通过数组的索引来修改原来的数组

js delphi">js-keyword">var ary = [js-number">12,js-number">23,js-number">24,js-number">42,js-number">1];  
js-keyword">var res = ary.forEach(js-function">js-keyword">function js-params">(item,js-keyword">index,input) js-comment">{  
       input[index] = item*10;  
})  
js-title">console.js-title">logjs-params">(res);js-comment">//--> undefined;  
console.log(ary);js-comment">//--> 通过数组索引改变了原数组

2.map()

有返回值,可以return 出来。

js javascript">arr[].map(js-function">js-keyword">functionjs-params">(value,index,array){

  js-comment">//do something

  js-keyword">return XXX

})

参数:value数组中的当前项,必选项;index当前项的索引,可选项;array原始数组,可选项;
区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);

js delphi">js-keyword">var ary = [js-number">12,js-number">23,js-number">24,js-number">42,js-number">1];  
js-keyword">var res = ary.map(js-function">js-keyword">function js-params">(item,js-keyword">index,input) js-comment">{  
    return item*10;  
})  
js-title">console.js-title">logjs-params">(res);js-comment">//-->[120,230,240,420,10];  原数组拷贝了一份,并进行了修改
console.log(ary);js-comment">//-->[12,23,24,42,1];  原数组并未发生变化

兼容写法:

不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:

js scala">js-javadoc">/** 
* forEach遍历数组 
* js-javadoctag">@param callback [function] 回调函数; 
* js-javadoctag">@param context [object] 上下文; 
*/  
Array.prototype.myForEach = function myForEach(callback,context){  
    context = context || window;  
    js-keyword">if(js-string">'forEach' in Array.prototye) {  
        js-keyword">this.forEach(callback,context);  
        js-keyword">return;  
    }  
    js-comment">//IE6-8下自己编写回调函数执行的逻辑  
    js-keyword">for(js-keyword">var i = js-number">0,len = js-keyword">this.length; i < len;i++) {  
        callback && callback.call(context,js-keyword">this[i],i,js-keyword">this);  
    }  
}  
js scala">js-javadoc">/** 
* map遍历数组 
* js-javadoctag">@param callback [function] 回调函数; 
* js-javadoctag">@param context [object] 上下文; 
*/  
Array.prototype.myMap = function myMap(callback,context){  
    context = context || window;  
    js-keyword">if(js-string">'map' in Array.prototye) {  
        js-keyword">return js-keyword">this.map(callback,context);  
    }  
    js-comment">//IE6-8下自己编写回调函数执行的逻辑  
    js-keyword">var newAry = [];  
    js-keyword">for(js-keyword">var i = js-number">0,len = js-keyword">this.length; i < len;i++) {  
        js-keyword">if(typeof  callback === js-string">'function') {  
            js-keyword">var js-keyword">val = callback.call(context,js-keyword">this[i],i,js-keyword">this);  
            newAry[newAry.length] = js-keyword">val;  
        }  
    }  
    js-keyword">return newAry;  
}  

jquery-each和map遍历">二、jQuery .each() .map()遍历

共同点:
即可遍历数组,又可遍历对象。

1.$.each()

没有返回值。$.each()里面的匿名函数支持2个参数:当前项的索引i,数组中的当前项n。如果遍历的是对象,k 是键,n 是值。

js javascript">$.each( [js-string">"a",js-string">"b",js-string">"c"], js-function">js-keyword">functionjs-params">(i, n){  
     alert( i + js-string">": " + n );  
});  
js javascript">$(js-string">"span").each(js-function">js-keyword">functionjs-params">(i, n){  
     alert( i + js-string">": " + n );  
});  
js javascript">$.each( { name: js-string">"John", lang: js-string">"JS" }, js-function">js-keyword">functionjs-params">(k, n){  
     alert( js-string">"Name: " + k + js-string">", Value: " + n );  
});  

2.$.map()

有返回值,可以return 出来。 .map()2 .each()里的参数位置相反:数组中的当前项n,当前项的索引i。如果遍历的是对象,i 是值,n 是键。如果是 ("span").map() .each() $(“span”).each()一样。

js javascript">js-keyword">var arr=$.map( [js-number">0,js-number">1,js-number">2], js-function">js-keyword">functionjs-params">(n){  
     js-keyword">return n + js-number">4;  
});  
console.log(arr);  
js javascript">$.map({js-string">"name":js-string">"Jim",js-string">"age":js-number">17},js-function">js-keyword">functionjs-params">(i,n){  
     console.log(i+js-string">":"+n);  
});  

原文链接:原生JS forEach()和map()遍历的区别以及兼容写法


http://www.niftyadmin.cn/n/764432.html

相关文章

python编程免费小说_【Python爬虫】纵横免费小说,第一页,试水

因某人的要求&#xff0c;写了个小说爬虫&#xff0c;应该大家都能看的懂&#xff0c;我下面就直接上代码了(更新个翻页随机头&#xff0c;断点续传以后再说&#xff0c;哈哈哈)。最后声明&#xff1a;本代码仅供技术交流&#xff0c;请勿商用&#xff0c;如有侵权&#xff0c;…

函数声明和函数表达式的区别

首先&#xff0c;我们来完成一些小测试&#xff1a; test1&#xff1a; function foo(){function bar() {return 3;}return bar();function bar() {return 8;} } alert(foo()); test2&#xff1a; function foo(){var bar function() {return 3;};return bar();var bar f…

pythonpandas设置索引_Python中pandas的层级索引!

1、认识层级索引以下示例将创建一个 Series 对象&#xff0c; 索引 Index 由两个子 list 组成&#xff0c;第一个子 list 是外层索引&#xff0c;第二个 list 是内层索引&#xff1a;>>> import pandas as pd>>> import numpy as np>>> obj pd.Ser…

js中递归实现的方法及其区别

递归函数&#xff1a;递归函数是在通过名字调用自身的情况下构成的。 递归实现阶乘函数&#xff1a; 方法一&#xff1a;通过使用函数的名字 function factorial(num){if(num<1){return 1;}else{return num*factorial(num-1);}}console.log(factorial(4)); 结果为&#x…

python通过句柄输入_python win32api win32gui win32con 窗口句柄 发送消息 常用方法 键盘输入...

import win32guiimport win32conimport win32api# 从顶层窗口向下搜索主窗口&#xff0c;无法搜索子窗口# FindWindow(lpClassNameNone, lpWindowNameNone) 窗口类名 窗口标题名handle win32gui.FindWindow("Notepad", None)# 获取窗口位置left, top, right, bottom…

学习javascript闭包

闭包&#xff1a;是指有权访问另一个函数作用域变量的函数。 创建闭包的常见方式就是在一个函数内创建另一个函数。 理解如何创建作用域链以及作用域链的用途对于理解闭包非常重要。作用域链本质上是一个指向变量对象的指针列表&#xff0c;它只引用但不实际包含变量对象。无…

python产品发布会_Python django框架开发发布会签到系统(web开发)

引言最近学习了虫师的发布会签到系统demo&#xff0c;结合自己所学django知识&#xff0c;对demo重新塑造了一下。也是为了练练手&#xff0c;巩固知识。现在就分享一下成果~Django工作流学习django web开发&#xff0c;先来简单了解一下django的工作机制&#xff0c;请看下图&…

javascript中的垃圾收集及内存泄漏

一、什么是内存泄漏&#xff1f; 程序的运行需要内存。只要程序提出要求&#xff0c;操作系统或者运行时&#xff08;runtime&#xff09;就必须供给内存。 对于持续运行的服务进程&#xff08;daemon&#xff09;&#xff0c;必须及时释放不再用到的内存。否则&#xff0c;内…