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

JavaScript035

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

<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.lengthi <leni++) { //优化性能处理

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.lengthi <leni++) {

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.lengthi <leni++) {

if(typeof callback === 'function') {

var val = callback.call(context, this[i], i, this)

newAry[newAry.length] = val

}

}

return newAry

}

</script>

只要循环不是中途退出的就说明没找到,所以这个n是“脱裤子放屁”多余的。这样即可:

/*

ATM取款程序

*/

//自定义二维数组

var AtmArray = [

[991, 123456, "张1", false, 0, 100],

[992, 123456, "张2", false, 0, 200],

[993, 123456, "张3", false, 0, 500]]

//定义函数

function qukuan(card, passWord, price) {

//遍历数据信息

for (var i = 0i <AtmArray.lengthi++) {

//判断卡号是否正确

if (AtmArray[i][0] == card) return "卡号正确"//如果找到匹配卡号,这里就直接跳出函数了

}

//程序运行到这里就说明没找到匹配的卡号,可以直接return了,不需要用个n来判断

return "找不到卡"

}

/*

[991, 123456, "张1", false, 0, 100],

*/

console.log(qukuan(990, 123456, 50))

vue 批量修改数组

2021-10-27

Vue-动态修改数组

vue中修改数组,dom未更新的问题

vue $set修改数组

vue修改数组元素方法

Vue方法中修改数组某一项元素而不能响应式更新

仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大

vue 重塑数组之 修改数组指定index的值

node实现文件属性批量修改(文件名)

Excel VBA批量修改文件夹下的文件名

Vue不能检测数组或对象变动问题的解决

关于 vue 不能 watch 数组变化 和 对象变化的解决方案

js递归遍历多维数组并在修改数组的key后返回新的多维数组

vue中修改了数据但视图无法更新的情况

vue中修改了数据但视图无法更新的情况[转载]

c# 控制台应用程序批量修改文件夹下的后缀名(包括子文件夹)

MP实战系列(十三)之批量修改操作(前后台异步交互)

vue 不能监测数组长度变化length的原因

LINQPad_批量修改图片名称

个人永久性免费-Excel催化剂功能第22波-Excel文件类型、密码批量修改,补齐PowerQuery短板

vue中改变数组的值视图无变化

vue中改变数组或对象,页面没做出对应的渲染

热门专题

C# LIST升序排序数据库收缩没有作用 REPLICATIONPRETTIER默认配置自然语言处理 RST和PDTB的区别JQUERY绑定CHANGE事件碱基质量分布图怎么看FLUME中ARVO和THRIFTDOCKER镜像中文文件名MYBATIS中NUMBER类型用$还是#KINECT计算关节角度更改ANT DESIGN 表格样式不生效MY SQL建立用户在本机(127.0.0.1)登录ANDROID开发自动登录TOMCAT 里面的HTML修改了没变化苹果段用AUDIO播放声音 不能自动播放EASYEXCEL 2 读取EXCELNETCORE 使用IDENTITYBAT IE WEB全屏WPF DATAGRID 行高自动高度DATATABLES.JS 在TR追加CHECKBOX

Home

Powered By