js数组迭代

数组迭代方法对每个数组项进行操作,可以简单地理解为按顺序访问目标(数组、对象等)中的每一项(其实和遍历概念没什么差别)

迭代分为:

  • 查找
  • 遍历

查找

  • indexof()方法在数组中搜索元素值并返回其位置
    语法:array.indexOf(item, start)
itemstart
必需,要检索的元素可选,从哪里开始搜索,负值将从结尾开始的给定位置开始,并搜索到结尾
var fruits = ["Apple", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");
console.log(a);//0
  • lastIndexOf()与indexOf() 类似,但是从数组结尾开始搜索
    语法:array.lastIndexOf(item, start)
itemstart
必需,要检索的元素可选,从哪里开始搜索,负值将从结尾开始的给定位置开始,并搜索到开头
var fruits = ["Apple", "Orange", "Apple", "Mango"];
var a = fruits.lastIndexOf("Apple");
console.log(a);//2
  • find() 方法返回通过测试函数的第一个数组元素的值
    语法:find((value,index,array) => {})
var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(myFunction);

function myFunction(value, index, array) {
  return value > 18;
}
// [25, 29]
  • findIndex() 方法返回通过测试函数的第一个数组元素的索引
    语法:find((value,index,array) => {})
var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(myFunction);

function myFunction(value, index, array) {
  return value > 18;
}
// 3

遍历

  • some()
  • every()
    两者的函数都接受三个值(项目值,项目索引,数组本身)
    这两个方法都是依次对数组的每项进行判断,返回boolean类型的值。不同的是,some是只要有一项满足条件就返回true,而every要求所有项都满足条件才会返回true

  var a=[1,2,3,4,5,4,3,2,1];

  var everyResult=a.every(function(item,index,a){
      return (item>2);
  });
  var someResult=a.some(function(item,index,a){
      return (item>2);
  });
  
  alert("everyResult:"+everyResult);//false
  alert("someResult:"+someResult);//true

这两个方法只做判断,都不会对数组进行改变

  • forEach
  • map
  • filter
    三者的函数都接受三个值(项目值,项目索引,数组本身)
    forEach:其就和for循环异曲同工,循环遍历,对每项进行操作。
    map:和forEach非常相似,其返回的是每次函数调用后的结果所组成的数组,本身不会改变
    filter:与上面两者相似,但是其返回的是函数调用结果值为true的项 (将调用的函数理解成表达式,即返回符合这个表达式所有项组成的新数组)
    区别:
    map和forEach其实用法上没啥子区别,但是!还是有点差别的,forEach是没有返回值的。
    然后,filter顾名思义,过滤器,是过滤掉数组不符合条件的项。所以用途上,filter会有很大的不同,常用于筛选掉不要的数组项
var a=[1,2,3,4,5,4,3,2,1];

var filterResult=a.filter(function(item,index,a){
  return (item>2);
});

var mapResult=a.map(function(item,index,a){
    return item*2;
});
var foreachResult=a.forEach(function(item,index,a){
	if(item<5) a[index]=0;
});
  
alert("filterResult:"+filterResult);  //3,4,5,4,3
alert("mapResult:"+mapResult);     //2,4,6,8,10,8,6,4,2
alert("foreachResult:"+foreachResult); //underfined
alert("foreachResult:"+a);        //0,0,0,0,5,0,0,0,0
  • reduce()
  • reduceRight()
    函数接受四个个值(总数(初始值/先前返回的值),项目值,项目索引,数组本身)
    两个方法类似,只不过reduce方法是从左到右,reduceRight方法是从右到左
var a=[1,2,3,4,5,4,3,2,1];

var sum=a.reduce(function (prev,cur,index,array){
  return prev+cur;
})

alert("sum:"+sum); // sum:25

上诉用法是最常用的用法,用于对数组所有项进行求和。事实上求积也是可以的,这个方法的灵魂就是有了这个prev值,具体看你如何以应用(不过事实上用的不多,在外部var一个sum变量也可以做到)

ps:reduce()和reduceRight()对于空数组是不会执行回调函数的。

补充一点,注意:forEach,filter,every,some会跳过空位,map会跳过空位,但是会保留这个值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值