ES6中新增了一些数组的方法
-
forEach():用于循环数组
-
map():用于处理数组
-
some()和every():用于判断是否正确
-
filter():用于过滤数组
-
reduce():用于处理数组
一、forEach()
forEach用于遍历数组,和for循环遍历数组基本一致
const arr=[1,2,3,4,5];
arr.forEach(item=>{
console.log(item)
})
console.log("---------")
for(let i =0;i<arr.length;i++){
console.log(arr[i])
}
可以发现都能实现遍历数组,但是两者在终止循环方面是有区别的
const arr=[1,2,3,4,5];
for(let i =0;i<arr.length;i++){
console.log(arr[i])
if(arr[i]===4){
break
}
}
console.log("后续代码")
在for循环中可以使用break来终止循环并且不会影响后续的代码
如果使用forEach会发现break和return都无法达到效果
使用break会报错
const arr=[1,2,3,4,5];
arr.forEach(item=>{
console.log(item)
if(item==4){
break;
}
})
使用return false没有任何效果
const arr=[1,2,3,4,5];
arr.forEach(item=>{
console.log(item)
if(item==4){
return false
}
})
需要用thorw来抛出错误才能终止循环,但是直接抛出后续的代码无法执行
const arr=[1,2,3,4,5];
arr.forEach(item=>{
console.log(item)
if(item==4){
throw new Error("循环到4需要终止")
}
})
console.log("后续代码")
所以需要使用try和catch判断报错信息,如果是你写的代码就不让他抛出错误,这样才能执行后续的代码
try{
const arr=[1,2,3,4,5];
arr.forEach((item)=>{
console.log(item)
if(item==4){
throw new Error("有一个等于四了");
}
})
}
catch(e){
if(e.message !="有一个等于四了"){
throw e;
}
}
console.log("后续的代码")
二、map()
map()给数组中的每一个元素添加特殊处理,返回新的数组
但是map不会用函数处理只有长度的空数组
// 创建一个长度为10的数组
const arr=new Array(10)
const arr2=arr.map((item,index)=>{
return index
})
console.log(arr2)
所以如果需要让map处理需要把每个索引都加上元素
// 这样能创建任意长度,元素等于索引的数组
// 创建一个长度为10的数组
const arr=new Array(10)
//这样写也行
//const arr=Array.from({
// length:10
//})
const arr2=arr.fill(1).map((item,index)=>{
return index
})
console.log(arr2)
三、some和every
some()依次拿出数组中的元素与特定的值进行比较,如果一个是真的就返回真,如果全假就返回假
every()依次拿出数组中的元素与特定的值进行比较,如果一个是假的就返回假,如果全真就返回真
const score=[50,60,100,54,90];
let result=score.some(item=>{
return item>=60
})
let result2=score.every(item=>{
return item>=69
})
console.log(result)//true
console.log(result2)//false
四、filter用于过滤数组
依次拿出数组中的元素,返回符合要求的元素
// 过滤出成绩大于60的学生
const students = [{
name: "小红",
score: 90
},{
name: "小明",
score: 50
},{
name: "小张",
score: 60
},{
name: "小王",
score: 30
},{
name: "张三",
score: 100
}]
const arr=students.filter((item)=>{
return item.score>60
})
console.log(arr)
五、reduce用于处理函数
reduce处理的数组只有一个返回值
他有四个参数
-
prev参数 上次操作的返回结果
-
item 当前梳理数组的元素
-
index当前梳理数组元素
-
array 当前对应的数组
给数组去重的方法
1.暴力for循环去重
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
const result=[];
arr.forEach(item=>{
if(!result.includes(item)){
result.push(item)
}
})
console.log(result)
2.利用数组下标去重
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
const result=arr.filter((item,index)=>{
return arr.indexOf(item)===index
})
console.log(result)
3.用Set实现去重
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
const result=new Set(arr);
console.log(result)
4.双循环去重
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i]===arr[j]){
arr.splice(j,1)
j--
}
}
}
console.log(arr)
5.reduce去重
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
const result=arr.reduce((prev,item)=>{
if(!prev.includes(item)){
prev.push(item)
}
return prev
},[])
console.log(result)
给对象统计重复次数的方法
用reduce实现
const arr=[1,2,3,1,1,2,34,5,67,23,2,2];
const result=arr.reduce((prev,item)=>{
if(item in prev){
prev[item]++
}else{
prev[item]=1
}
return prev
},{})
console.log(result)
使用双层for循环实现
const arr = [1, 2, 3, 1, 1, 2, 34, 5, 67, 23, 2, 2];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) == i) {
var num = 1;
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
num++;
}
}
console.log(arr[i] + "出现的次数是:" + num)
}
}