js中常用方法
reduce()
语法:arr.reduce(function(prev,cur,index,arr){
…
}, init);
可以看到,reduce方法接收一个回调函数
其中:prev表示上一次回调的结果;cur表示当前处理的元素;index当前处理的索引;arr当前数组;init初始值
实例
// var arr =[1,2,3,4,5,2,9];
// 1. 实现数组元素之和
let sum = arr.reduce(function (prev,curr,index,arr){
//传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项1,相加之后返回值为1作为下一轮回调的prev值,然后再 继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。
return prev + curr;
},0)
console.log(sum) // 26
// 2. 数组最大值
let max = arr.reduce(function (prev,curr,index,arr){
return Math.max(prev,curr);
})
console.log(max) // 9
//由于没有初始值,所以prev的值为数组中的第一项也就是1,curr为第二项2,两个比较,将最大结果作为回调,进行下一轮的比较
// 3. 数组去重
/*
思路:
1. 初始化一个空数组,也就是prev=[]
2.将需要去重处理的数组中的第1项在初始化数组中查找,
如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中
3.将需要去重处理的数组中的第2项在初始化数组中查找,
如果找不到,就将该项继续添加到初始化数组中
*/
let result = arr.reduce(function (prev,curr,index,arr){
//-1找不到,添加到数组中
prev.indexOf(curr)===-1&&prev.push(curr)
return prev;
},[])
console.log(result) // [1, 2, 3, 4, 5, 9]
// 4.字符串中字母出现的次数
/*
思路:
1. 先将字符串化成数组形式
2.利用三元表达式,将保存到一个字典中,以字母作为键,次数作为值
3.字典中存在了+1,否则该字符次数为1
*/
const str = 'asdfghjwsdfghjasdfghkjhgfdsyhb';
let result = str.split('').reduce(function (prev,curr) {
prev[curr]?prev[curr]++ : prev[curr]=1;
return prev
},{})
console.log(JSON.stringify(result,null,2))
/*
{
"a": 2,
"s": 4,
"d": 4,
"f": 4,
"g": 4,
"h": 5,
"j": 3,
"w": 1,
"k": 1,
"y": 1,
"b": 1
}
*/
map()方法
用于遍历数组,返回处理之后的新数组
let arr = [1,2,3,4,5,2,6,9]
let result = arr.map(function (item,index,array) {
return item*2
})
/*
该方法与forEach()的功能类似,只不过map()具有返回值,
会返回一个新的数组,这样处理数组后也不会影响到原有数组。
*/
console.log(result) //[2, 4, 6, 8, 10, 4, 12, 18]
every()方法
用于判断数组中的每一项元素是否都满足条件,返回一个布尔值
let arr = [1,2,3,4,5,2,6,9]
let result = arr.every(function (item,index,array) {
return item>2
})
/*
可以看到,示例中是要判断数组arr中的元素是否都大于2
,很显然不是,所以该方法最终返回false。
*/
console.log(result) //false
some()方法
用于判断数组中的是否存在满足条件的元素,返回一个布尔值
let arr = [1,2,3,4,5,2,6,9]
let result = arr.some(function (item,index,array) {
return item>2
})
/*
可以看到,示例中是要判断数组arr中的元素是否存在大于2
,很显然存在,所以该方法最终返回true。
*/
console.log(result) //true
filter()方法
用于筛选数组中满足条件的元素,返回一个筛选后的新数组
let arr = [1,2,3,4,5,2,6,9]
let result = arr.filter(function (item,index,array) {
return item>2
})
/*
可以看到,示例中是要判断数组arr中的元素大于2并返回
*/
console.log(result) //[3, 4, 5, 6, 9]
以上五大方法除了传递一个匿名函数作为参数之外,还可以传第二个参数,该参数用于指定匿名函数内的this指向,例如:
let arr = [1,2,3,4,5,2,6,9]
let result = arr.filter(function (item,index,array) {
console.log(this)//window
})
let arr = [1,2,3,4,5,2,6,9]
let result = arr.filter(function (item,index,array) {
console.log(this)//[1, 2, 3, 4, 5, 2, 6, 9]
},arr)