数组新增办法
filter– 过滤器
指定一个函数 fun 作为参数,遍历原数组,依据 fun 函数的返回值判断新返回的数组中是否蕴含该元素,返回一个新数组,不扭转原数组
let arr = [1,2,3,4,5,6];
let newArr = arr.filter((v,i,arr)=>v%2==0);
/* 这里 return 只有一条语句,若加上{}, 则必须加上 return 关键字,若不写 return 关键字,则必须去掉{},否则会出错 */
/*arguments 别离示意:v- 以后项的 value,i- 以后项的 index,arr- 原数组 */
console.log(newArr); //[2,4,6]
map– 映射
指定一个函数 fun 作为参数,遍历原数组,将每个元素与 fun 函数的返回值进行运算,组成一个新数组返回,不扭转原数组
let arr = [1,3,5,7,9];
let newArr = arr.map((v,i,arr)=>++v);/* 若这里是 v ++, 则返回[1,3,5,7,9]*/
/*arguments 与 filter 统一 */
console.log(newArr); //[2,4,6,8,10]
reduce– 汇总
指定一个函数 fun 作为参数,遍历原数组,每遍历一遍失去一个与函数 fun 返回值计算的值作为 prev, 传递给下一次遍历,参加 fun 函数返回值计算,遍历实现返回最终的 prev 值,不扭转原数组
可用于数组求和
let arr = [1,2,3,4,5];
let sum = arr.reduce((prev,v,i,arr)=>prev+v);
console.log(sum) //15
// 当数组元素是对象时:let students = [{name: 'Liane',score: 90},
{name: 'Ann',score: 80},
{name: 'Jack',score: 50},
{name: 'Lisa',score: 70},
]
let avrScore = students.reduce((prev,v,i)=>{console.log(prev) //{name: 'Liane',score: 90}
//170
//220
//290
console.log(i) // 顺次打印 1 2 3
// 由此可知,函数刚执行时,会将原数组第一个元素赋值给 prev
// 接下来每一次遍历,会将函数返回值从新赋值给 prev
return i == 1 ? prev.score + v.score :prev + v.score
})/students.length;
console.log(avrScore) //72.5
forEach– 遍历
指定一个函数 fun 作为参数,遍历原数组,fun 的参数能够间接用来批改原数组,该 fun 函数没有返回值,不能 break,continue。
let arr = [1,2,3,4,5];
arr.forEach((v,i,arr)=>{arr[i]=v*2});
//
console.log(arr) //[2,4,6,8,10]
some– 能够用来检测一个数组是不是有元素满足某个条件
指定一个函数 fun 作为参数,遍历原数组,将遍历的每个元素与 fun 函数的返回值计算,当有某个元素满足条件则返回 true, 若所有元素都不满足则返回 false
let arr = [1,3,5,8];
let boo = arr.some((v,i,arr)=>v%2==0);
console.log(boo) //true
let let students = [{name: 'Liane',score: 90},
{name: 'Ann',score: 80},
{name: 'Jack',score: 50},
{name: 'Lisa',score: 70},
];
boo = students.some((v)=>{v>60});
console.log(boo) //false
every– 能够用来查看一个数组是不是所有元素都满足某个条件
指定一个函数 fun 作为参数,遍历原数组,将遍历的每个元素与 fun 函数的返回值计算,若所有元素满足条件返回 true, 若有元素不满足则返回 false
let arr = [1,3,5,8];
let boo = arr.every((v,i,arr)=>v%2==0);
console.log(boo) //false
let let students = [{name: 'Liane',score: 90},
{name: 'Ann',score: 80},
{name: 'Jack',score: 50},
{name: 'Lisa',score: 70},
];
boo = students.every((v)=>{v>60});
console.log(boo) //false
find– 查找,返回数组中第一个符合条件的那一项
指定一个函数 fun, 遍历原数组,将遍历的每个元素与 fun 函数的返回值计算,将第一个满足条件的元素作为返回值返回,不扭转原数组。
let arr = [11,21,30,44,50];
let result = arr.find((v,i,arr)=>v%2==0);
console.log(result) //30
let let students = [{name: 'Lisa',score: 70},
{name: 'Jack',score: 50},
{name: 'Liane',score: 90},
{name: 'Ann',score: 80}
];
result = students.find(v=>v.score>80);
cosnole.log(result); //{name: 'Liane',score: 90}