js各种数组循环方法和效率等对比

<script>
        function op(item) {
            item.name = item.name + 'W'
        }
        function normalFor(arr) {
            let start = new Date().getTime()
            for (let j = 0; j < arr.length; j++) {
                op(arr[j])
            }
            let end = new Date().getTime()
            console.log('normalfor:', end - start, arr[arr.length / 2 - 1].name)
        }
        function opNormalFor(arr) {
            let start = new Date().getTime()
            let len = arr.length
            for (let j = 0; j < len; j++) {
                op(arr[j])
            }
            let end = new Date().getTime()
            console.log('opNormalfor:', end - start, arr[arr.length / 2 - 1].name)
        }
        // can't use break,无法中断循环,函数返回数据越复杂时间越长
        function eachFor(arr) {
            let start = new Date().getTime()
            arr.forEach((item, index, arr) => {
                op(item)
                return {} //返回数据越复杂时间越长
            })
            let end = new Date().getTime()
            console.log('Eachfor:', end - start, arr[arr.length / 2 - 1].name)
        }
        // can't use break,无法中断循环
        function mapFor(arr) {
            let start = new Date().getTime()
            arr.map((item, index, arr) => {
                op(item)
            })
            let end = new Date().getTime()
            console.log('mapfor:', end - start, arr[arr.length / 2 - 1].name)
        }
        function inFor(arr) {
            let start = new Date().getTime()
            for (let val in arr) {
                op(val)
            }
            let end = new Date().getTime()
            console.log('inFor:', end - start, arr[arr.length / 2 - 1].name)
        }
        function ofFor(arr) {
            let start = new Date().getTime()
            for (let val of arr) {
                op(val)
            }
            let end = new Date().getTime()
            console.log('ofFor:', end - start, arr[arr.length / 2 - 1].name)
        }
        // can't use break, 返回true就中断循环
        function someFor(arr) {
            let start = new Date().getTime()
            arr.some(function (item, index, array) {
                op(item);
                return false //true就中断循环
            })
            let end = new Date().getTime()
            console.log('someFor:', end - start, arr[arr.length / 2 - 1].name)
        }
        // can't use break,返回false就中断循环
        function everyFor(arr) {
            let start = new Date().getTime()
            arr.every(function (item, index, array) {
                op(item);
                return true  //false就中断循环
            })
            let end = new Date().getTime()
            console.log('everyFor:', end - start, arr[arr.length / 2 - 1].name)
        }

        let arr = []
        for (j = 0, len = 2000000; j < len; j++) {
            arr.push({
                id: j,
                name: 'name' + j,
                age: j + 1
            })
        }
        normalFor(arr)   //修改val会影响原始数组
        opNormalFor(arr) //修改val会影响原始数组
        eachFor(arr)     //item是对象会影响原始数组,如果是数字或字符不会影响原始数组
        mapFor(arr)      //item是对象会影响原始数组,如果是数字或字符不会影响原始数组
        inFor(arr)       //修改item不会影响原始数组, item理解为数组成员的深拷贝
        ofFor(arr)       //item是对象会影响原始数组,如果是数字或字符不会影响原始数组
        someFor(arr)     //item是对象会影响原始数组,如果是数字或字符不会影响原始数组
        everyFor(arr)    //item是对象会影响原始数组,如果是数字或字符不会影响原始数组
    </script>

 效率对比:for in方式循环效率最低

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值