数组迭代的几种方法

Array.forEach()

该方法接收三个参数(value元素项,index元素索引,array数组本身)

var txt = "";
var numbers = [45, 4, 9, 16, 25];
numbers.forEach(myFunction);

function myFunction(value, index, array) {
  txt = txt + value + "<br>"; 
}
  • forEach()函数没有返回值;
  • 通常,在 for循环中跳出循环可以用 break或者 continue 来跳出循环。
    break:跳出循环;
    continue:跳过当次循环。而有时候需要在 foreach 中跳出循环,该怎么做呢?
  • forEach()终止或者跳出循环,除非抛出异常throw Error(),forEach不能使用breakcontinue这两个关键字,会直接报错,因为 forEach 本身无法跳出循环,必须遍历所有的数据才能结束,它传入的是一个回调函数,因此形成了一个作用域,它内部所定义的变量不会像for循环一样污染全局变量。return 语句的作用只能跳出当前循环(实现了continue的效果),并不能跳出整个循环.
  • 所有浏览器都支持 Array.forEach(),除了 Internet Explorer 8 或更早的版本:

Array.map() 

该方法接收三个参数(value元素项,index元素索引,array数组本身)

var numbers1 = [45, 4, 9, 16, 25];
var numbers2 = numbers1.map(myFunction);

function myFunction(value, index, array) {
  return value * 2;
}
  • map() 方法返回一个新数组, 新数组中的元素为原始数组中的每个元素调用函数处理后得到的值。
  • map() 不会对空数组进行检测
  • map() 方法不会更改原始数组。map() 不会改变《基础数据类型的》原数组,就是说基础类型的数组在修改 item 时并不会改变原数组
  • 对象数组map()循环对象数组,对象数组在修改 item 项 时会改变原数组
  • map方法循环原始数组时,如果在调用callback函数对原始数组进行添加或者删除元素的操作,那就map返回的值则会直接改变原始数组,存在的数组元素改变了,那么传给 callback 的值是 map 访问该元素时的值。
  • 调用 map 方法之后 追加 的数组元素不会被 callback 访问。
  • 数组的Map方法详解_wflynn的博客-CSDN博客_数组map用法

Array.filter()

该方法接收三个参数(value元素项,index元素索引,array数组本身)

var numbers = [45, 4, 9, 16, 25];
var over18 = numbers.filter(myFunction);

function myFunction(value, index, array) {
  return value > 18;
}
  • filter() 方法创建一个,通过检查 指定数组中 符合条件的 所有元素后 返还这部分元素的新数组。
  • 所有浏览器都支持 Array.filter(),除了 Internet Explorer 8 或更早的版本:
  • filter方法不会对空数组进行检测,不会改变原始数组

Array.reduce()

该方法接收四个参数(total总数(初始值/先前返回的值),value元素项,index元素索引,array数组本身)

var numbers1 = [45, 4, 9, 16, 25];
var sum = numbers1.reduce(myFunction);

function myFunction(total, value, index, array) {
  return total + value;
}
  • reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。对空数组是不会执行回调函数的。
  • reduce() 方法能够接受一个初始值:

比如接收一个对象作为初始值,统计一个数组中有多少个不重复的单词:
var arr = ["apple","orange","apple","orange","pear","orange"]; 
function getWordCnt(){ 
  return arr.reduce(function(prev,next){ 
    prev[next] = (prev[next] + 1) || 1; 
    return prev; 
  },{}); 
} 
console.log(getWordCnt());//{apple: 2, orange: 3, pear: 1}


// 上述例子不用不用reduce时: 
var arr = ["beijing","shanghai","beijing","shanghai","guangzhou","shanghai"]; 
function getWordCnt(){ 
  var obj = {}; 
  for(var i= 0, l = arr.length; i< l; i++){ 
    var item = arr[i]; 
    obj[item] = (obj[item] +1 ) || 1; 
  } 
  return obj; 
}
console.log(getWordCnt());//{beijing: 2, shanghai: 3, guangzhou: 1}


数组对象利用reduce求和:
let list = [{Price: 1,Num: 3}, {Price:2,Num: 6}, {Price: 3,Num: 9}]
let a = this.list.reduce((p, r) => {
    p += r.Price * r.Num
    return p
}, 0)
console.log(a) //42

利用reduce合并二维数组
var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
var oneArr = twoArr.reduce(function(total,currentValue){
  // console.log(total)
  return total.concat(currentValue);
})
console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

Array.reduceRight()

reduceRight() 方法在数组中从右到左工作,参阅 reduce(),只是执行顺序相反。

Array.every()

every() 方法检查所有数组值是否通过测试,返回值为布尔值。

该方法接收三个参数(value元素项,index元素索引,array数组本身)

检查所有数组值是否大于 18:返回结果为false
var numbers = [45, 4, 9, 16, 25];
var allOver18 = numbers.every(myFunction); //false

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

Array.some()

some() 方法检查某些数组值是否通过了测试,返回值为布尔值。

该方法接收三个参数(value元素项,index元素索引,array数组本身)

检查所有数组值是否大于 18:返回结果为true
var numbers = [45, 4, 9, 16, 25];
var allOver18 = numbers.some(myFunction); //true

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

Array.find()

find() 方法返回通过测试函数的第一个数组元素的值。
该方法接收三个参数(value元素项,index元素索引,array数组本身)

查找(返回)大于 18 的第一个元素的值:
var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(myFunction); //25

function myFunction(value, index, array) {
  return value > 18;
}
  • find() 方法不改变原始数组

Array.findIndex()

findIndex() 方法返回通过测试函数的第一个数组元素的位置索引。

该方法接收三个参数(value元素项,index元素索引,array数组本身)

查找大于 18 的第一个元素的索引:
var numbers = [4, 9, 16, 25, 29];
var first = numbers.findIndex(myFunction);

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

Array.indexOf()

indexOf() 方法在数组中搜索元素值并返回其位置索引,indexof方法也可以用来检索字符串中指定字符的位置

语法  array.indexOf(item, start)

item必需。要检索的项目。
start可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。
检索数组中的项目 "Apple":

var fruits = ["Apple", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple"); //0
  • 如果项目多次出现,则返回第一次出现的位置。开始位置的索引为 0。
  • 如果在数组中没找到指定元素则返回 -1。

Array.lastIndexOf()

Array.lastIndexOf() 与 Array.indexOf() 类似,但是从数组结尾开始搜索。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值