js数组遍历在数组操作中经常使用。 在这期间,我学习了vue视频。 上面顺便说明了js数组的遍历方法,但是当时没有留下笔记。 到了今天回想起来,果然忘了,所以决定开始在这里记录。 别多嘴,接下来。
1.for循环
我觉得这种方法是js学习者最先接触到的js遍历方法,反正我最先接触的,可能是我的水平太低了。 我经常使用的是这个方法。
假设有//数组arr
letarr=[ 1,2,3,4,5 ];
//for循环
for(letI=0; i arr.length; I ) {
//do someing……
控制台. log (arr [ I ];
}
//console.log
1
2
3
4
复制五码
2 .自由循环
该方法的使用次数仅次于上一个for循环,但实际效率不如for循环高。 forEach循环的参数有2个,第一个是参数为实际操作的函数function,第二个参数that是改变this方向的参数,一般不怎么使用。 forEach参数的函数也有两个参数。 第一个参数是循环中的每个item,第二个参数是与每个项目相对应的下标索引。 请注意,在使用中,that和index都可以不写,而forEach循环不支持返回
假设有//数组arr
letarr=[ 1,2,3,4,5 ];
//福雷循环
arr.foreach (功能(item,index ) {
//do someing……
控制台. log (arr [ I ];
(,that );
//console.log
1
2
3
4
5
复制代码
3.for in循环
这确实也是一个循环,但平时很少用它遍历数组。 因为他的“弊端”很明显,所以也遍历数组的私人属性。 因为缺省情况下遍历数组的key值,所以它是字符串//,假设数组arr存在
letarr=[ 1,2,3,4,5 ];
//向数组中添加专用属性
arr.a='key '
//for in循环
for(letkeyinarr ) {
//do someing……
控制台. log (type of ) key );
}
//console.log
//注意到这里打印了六个,for in循环还遍历数组的专用属性
史汀
史汀
史汀
史汀
史汀
字符串复制代码
4.for of循环(ES6 ) ) ) ) ) )。
for of循环用es6的方法,他弥补了forEach和for in循环的弊端。 有返回,并且不遍历数组的专用属性。 注意: for of循环无法遍历对象
假设有//数组arr
letarr=[ 1,2,3,4,5 ];
//向数组中添加专用属性
arr.a='key '
//for of循环
for(letvalofarr ) {
//do someing……
控制台. log (val;
}
//console.log
//请注意这里打印了五个。 for of循环不遍历数组的专用属性
1
2
3
4
复制五码
5 .过滤器
过滤器是个人也经常使用的方法。 因为他遍历数组并返回新数组,所以不影响原始数组。 遍历数组中的每个项目,如果回调函数返回true,则将该项目添加到新数组中。 回调函数有两个参数“item,index”,其中item为各项,index为下标。 index可以不写,假设没有//也存在数组arr
letarr=[ 1,2,3,4,5 ];
//声明新的空数组
let newArr=[];
//向数组中添加专用属性
arr.a='key '
//过滤器
//这里使用es6箭头函数
newarr=arr.filter(item=item3);
//这里使用的是es5语法,与上面的操作相等
new arr=arr.filter (function (item ) )
返回项目3;
() )
控制台。
log(newArr)//console.log
[4,5]复制代码
6.map映射
map映射会去遍历数组的每一项,但是不会操作改变原数组,同filter一样会返回一个新的数组。回调函数返回的是什么,对应的新数组的那一项就会是什么//假设存在一个数组arr
let arr = [1,2,3,4,5];
//声明一个新的空数组
let newArr = [];
//给数组添加一个私有属性
arr.a = "key"
//map映射
//这里使用的是es6语法
newArr = arr.map(item=>`
${item} `);//这里是一般语法
newArr = arr.map(function(item){
return "
" + item + " ";})
console.log(newArr)
//console.log
[
"
1 ","
2 ","
3 ","
4 ","
5 "]复制代码
7.include和find
include和find都是es6的的方法。include有一个参数,它会遍历数组的每一项与参数对比,如果存在该参数,则返回true。而find的参数是一个回调函数,函数的参数是每一项以及对应下标,find会返回匹配的那一项,一旦匹配就不会继续往下匹配,find返回一个新的数组//假设存在一个数组arr
let arr = [1,2,3,4,5,55];
//include
console.log(arr.include(5));
//include console
true
//find
let res = arr.find(function(item,index){
//如果这一项包含了5则返回true
return item.toString().indexOf(5) > -1;
})
console.log(res);
//find console
5复制代码
8.some和every
some和every是两个作用截然相反的方法。some遍历数组,找到true,即返回true,否则返回false;every则是找到false返回false,否则返回true//假设存在一个数组arr
let arr = [1,2,3,4,5,55];
//some
let someResult = arr.some(item=>item > 4);
console.log(someResult);
//some console
true
//every
let evevyResult = arr.every(item=>item > 0);
console.log(everyResult);
//every console
true复制代码
9.reduce
说实话,这个方法我到现在都不太明白,无法在这里说明,希望大家自己查阅
2018.5.30 更新~
社区还是一个好地方,取长补短。本来以为一篇拙见不会有人来注意,就没有管理这篇文章,理解了reduce之后再来更新笔记,发现就有一些fndsb来为我指点迷津了。在此感谢各位fndsb的指正与指教~
正文:
reduce是es5的方法,从数组的第一项开始逐步迭代至最后一项。reduce的参数可以有两个,第一个是一个回调函数(必需),函数参数可包括四个:prev,cur,index,arr。其中,prev是前一个迭代的值,cur是当前迭代的一项,index是当前一项的下标,arr则是迭代的原数组;reduce的第二个参数是传入的基础值,可不用。如果不用,迭代将从数组的第一项开始//假设存在一个数组arr
let arr = [1,2,3,4,5];
//reduce
//不传入第二个参数
let result = arr.reduce((prev,cur,index,arr)=>prev+cur);
console.log(result);
//console
15
//传入第二个参数
let result = arr.reduce((prev,cur,index,arr)=>{return prev+cur;},100);
console.log(result);
//console
115
复制代码