js数组遍历的常用的几种方法以及差异和性能优化

<script type="text/javascript">
            /*对比:
            1、map速度比foreach快
            2、map会返回一个新数组,不对原数组产生影响,foreach不会产生新数组,foreach返回undefined
            3、map因为返回数组所以可以链式操作,foreach不能
            4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错*/
            /*方法一:*/
            var arr1 = [1, 2, 3, 4, 5, 6];
            for(var i = 0, len = arr1.length; i < len; i++) { //优化性能处理
                console.log(arr1[i], ‘for遍历出来的数据‘); //每个item  1,2,3,4,5,6
            }
            /*方法二:*/
            /*forEach方法中的function回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身*/
            var arr2 = [{
                    name: ‘bob‘,
                    age: 20
                },
                {
                    name: ‘tom‘,
                    age: 18
                },
                {
                    name: ‘sos‘,
                    age: 19
                }
            ]
            arr2.forEach((val, i) => { //没有返回值的,对原来数组也没有影响
                console.log(val, ‘遍历出来的每个obj‘)
            });
            /*方法三:*/
            var fruits = [1, 2, 3, 4, 5, 6, 7, 8];
            let arr = fruits.map((item, index) => {
                console.log(item, ‘top‘)
                console.log(index, ‘top‘)
                return item * 8
            })
            console.log(arr, ‘newarr‘) //[8, 16, 24, 32, 40, 48, 56, 64] "newarr"
            var a = fruits.indexOf("Apple", 4);
            console.log(a)
            //for 和 forEach都是普通循环,map 带返回值并且返回一个新数组;
            /*
             *当前元素的值,当期元素的索引值,当期元素属于的数组对象;
            语法:array.map(function(currentValue,index,arr), thisValue)
            map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
            map() 方法按照原始数组元素顺序依次处理元素。
            注意: map() 不会对空数组进行检测。
            注意: map() 不会改变原始数组。
             * */
            /*方法四:*/
            /*兼容写法:
            不管是forEach还是map在IE6 - 8 下都不兼容( 不兼容的情况下在Array.prototype上没有这两个方法), 那么需要我们自己封装一个都兼容的方法:*/
            /**
             * forEach遍历数组
             * @param callback [function] 回调函数;
             * @param context [object] 上下文;
             */
            Array.prototype.myForEach = function myForEach(callback, context) {
                context = context || window;
                if(‘forEach‘ in Array.prototye) {
                    this.forEach(callback, context);
                    return;
                }
                //IE6-8下自己编写回调函数执行的逻辑
                for(var i = 0, len = this.length; i < len; i++) {
                    callback && callback.call(context, this[i], i, this);
                }
            }
            /**
             * map遍历数组
             * @param callback [function] 回调函数;
             * @param context [object] 上下文;
             */
            Array.prototype.myMap = function myMap(callback, context) {
                context = context || window;
                if(‘map‘ in Array.prototye) {
                    return this.map(callback, context);
                }
                //IE6-8下自己编写回调函数执行的逻辑var newAry = [];
                for(var i = 0, len = this.length; i < len; i++) {
                    if(typeof callback === ‘function‘) {
                        var val = callback.call(context, this[i], i, this);
                        newAry[newAry.length] = val;
                    }
                }
                return newAry;
            }
        </script>

原文地址:https://www.cnblogs.com/lhl66/p/9098126.html

时间: 2024-11-08 20:47:16

js数组遍历的常用的几种方法以及差异和性能优化的相关文章

js数组和字符串去重复几种方法

js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i = 0, n = this.length; i < n; i++) { for(var x = 0, y = r.length; x < y; x++) { if(r[x] == this[i]) { continue label; } } r[r.length] = this[i]; } re

JS中遍历对象属性的四种方法

Object.keys().Object.values().Object.entries().for...in.Map (1)Object.keys(): let ex1 = {c1: 'white',c2: 'black'} let ex2 = {c3: 'green',c4: 'yellow'} Object.setPrototypeOf(ex1 ,ex2 ):Obejct.keys(ex2 ) === ['c3','c4']           ex2['c3'] === 'green'

JS跳转页面常用的几种方法

第一种:(常用) <script language="javascript" type="text/javascript"> window.location.href="jb51.jsp?backurl="+window.location.href; </script> 第二种: <script language="javascript"> alert("返回"); wi

Js中去除数组中重复元素的4种方法

今天工作遇到此问题,尝试多个方法不尽人意,故此写个博客来总结一下如何在js中去除重复元素. 方法1:         Array.prototype.method1 = function(){             var arr[];    //定义一个临时数组             for(var i = 0; i < this.length; i++){    //循环遍历当前数组                 //判断当前数组下标为i的元素是否已经保存到临时数组          

转→js数组遍历 千万不要使用for...in...

看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:http://m.blog.csdn.NET/blog/u014357977/38298263 正文↓ js数组遍历相信大家都不陌生,很多人会想到for循环和 for...in...循环,但是千万不要使用for...in...循环遍历数组,特别是如果你想写点有用的,能够移植的代码时.下面我们来看看这个

Struts迭代器(iterator)遍历List常用的4种例子 - 冯世杰

[摘要]本文主要介绍及演示了Struts迭代器(iterator)遍历List常用的4种例子,基于MyEclipse开发环境,重点关注前后端代码的实现,给出后端java代码.前段struts标签代码,主要有如下4个例子: 1. 遍历List<String> 2. 遍历List<List<String>> 3. 遍历UserEntity 4. 遍历List<UserEntity> 例子的详细代码请参考附件1,给出两个4个例子的运行截图(如下图1):      

js数组遍历和对象遍历

针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( var i = 0; i <arr.length; i++){ console.log(arr[i]); } 2,优化版for循环:使用变量,将长度缓存起来,避免重复获取长度,数组很大时优化效果明显 for(var j = 0,len = arr.length; j < len; j++){ co

(转载)Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用entries来遍历 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer,

二维数组作为函数参数的几种方法

#include <stdio.h> #define N 5 void fun1(int a[N][N]) { int i,j; for (i=0;i<N;i++) { for (j=0;j<N;j++) { if (i>j) { a[i][j]+=a[j][i]; a[j][i]=0; } } } } void fun2(int **a,int m,int n) { int i,j; for (i=0;i<m;i++) { for (j=0;j<n;j++) {