最近公司项目上线了,自己也有些时间去整理和学习今天就写一下最近对数组遍历方法的一些总结
map
语法:arr.map(function (v,i,a) {条件});
作用:遍历数组,根据条件+-x / 等遍历原来的数组得到一个新的数组
参数:item 数组的每一项,index 索引,下标,arr数组自身(基本不用)
返回值:一个新的数组
注意点:原数组一般不会改变
forEach
语法:arr.forEach();
作用:相当于for循环遍历,将数组中的每个元素一次交给回调函数处理
参数:跟map一致
返回值:没有返回值
注意点:当数组中元素是值类型,forEach绝对不会改变数组;当是引用类型,则可以改变数组arr.forEach(p = p.age = p.age + 1)(不允许改变值,复杂数据类型地址不可改变)
some (中文:有些,其实可以看出作用,有些符合条件返回true)
语法:arr.some();
作用:判断条件 遍历每一项,数组中有一项符合条件就返回true,否则返回false
参数:跟map一致
返回值:布尔类型
every (中文:每一项符合就返回true)
语法:arr.every();
作用:遍历数组的每一项,全部都满足条件就返回true,否则返回false
参数:跟map一致
返回值;boolean布尔类型
filter
语法:arr.filter();
作用:遍历数组arr,返回满足条件的所有值,放到一个新的数组中
参数:跟map一致
返回值:一个新的数组,尽量拿个变量接收
find(中文:发现,发现就返回)
语法:arr.find();
作用:遍历数组arr,找到满足条件的值,就停止
参数:跟map一致
返回值:返回满足条件的这一项内容
findIndex
语法:arr.findIndex();
作用:遍历数组arr,找到满足条件的值,就停止返回数组的那一项数据
参数:跟map一致
返回值:满足条件的那一项的下标
说明:
相信通过上面的讲解大家都有一定的了解了,上面我用的最多的就是filter其次是forEach、map,刚开始我对forEach和map的区别不太了解,那我就说一下两者的区别,区别:、forEach没有返回值仅仅是遍历数组,map有返回值;相同点:forEach当数组里的内容对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,是不能被改变的。但对于复合类型的数据(主要是对象和数组),元素指向的是内存地址,就是是一个指向实际数据的指针,forEach保证这个指针是固定的(即总是指向一个固定的地址),至于它指向的数据结构的内容是否改变,他不管,所以forEach里面保存的是简单数据类型,原数组是不可被改变,如果是符合类型,符合类型的指向的地址不可变,但是内容是可变的,对于map也一样!
补充:
今天看到ES6对数组还有一种遍历方法for……of
for……of可以代替forEach,区别当然有很多,最主要的是forEach无法中途跳出循环,break
命令、continue命令或return
命令都不能奏效,for……of可以,当然for……of的用法有很多,以后再去讨论。