some()和every()
every和some是两个相似的迭代方法
区别在于:every()是数组中的每一项都为true,则最终迭代结果返回才true,否则false;
some()是数组中的只要有某一项为true,则最终迭代结果返回true,否则返回false;
let arr=[1,2,3,4,5];
let result= arr.every((item)=>{
return item>2
});
console.log(result); //false
let result1=arr.some((item)=>{
return item>2
});
console.log(result1) //true
filter()
filter() 过滤函数,从原函数中返回符合条件的项组成的新数组,如果没有return,则返回的是空数组;
let arr = [1, 2, 3, 4];
let result = arr.filter((item) => {
return item > 2
});
console.log(result) //[3,4]
如果处理表达式是运算,将无效,返回元素组成员组成的数组(可以和map进行对比)
var res33 = arr.filter(function(item, index, array){
return item * 2;
});
console.log('res33', res33); // 1, 12, 32, 2, 3, 44, 120, 3, 5
map()
返回和原数组长度一样的新数组,如果没有return,则返回长度一样的数组,并且每一项都是undefined
如果给定的处理函数的表达式是逻辑判断,它返回的是布尔值组成的数组
var res4 = arr.map(function(item, index, array){
return item > 20;
});
console.log(res4); // false,false,true,false,false,true,true,false,false
如果给定处理函数的表达式是运算表达式,它返回的是每一项运算后的结果的数组
var res5 = arr.map(function(item, index, array){
return item * 2;
});
console.log(res5); // 2,24,64,4,6,88,240,6,10
reduce()
对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。回调函数有两个必须的参数:
- accumulator,累加器累加回调的返回值; 它是上一次调用回调时返回的累积值
- currentValue,数组中正在处理的元素。
let arr = [1, 2, 3, 4];
let result = arr.reduce((prev, cur) => {
return prev + cur;
});
console.log(result); //10
var arr=[0,1,2,3,4]
arr.reduce(function(preValue,curValue,index,array){
return preValue+ curValue;
},5);/*15*/
reduce 的最重要点就是利用累加器参数(accumulator)了,如果值操作第二个参数 item, 将会只处理数组最后一项,跟 for 循环中的 i 的效果一样
var arr = [1, 12, 32, 2, 3, 44, 120, 3, 5];
var res66 = arr.reduce(function(accumulator, item){
return item * 2;
});
console.log('res66', res66); // 10
上面的代码试图只操作 item ,结果只是返回了数组最后一项的处理结果: 5 * 2 = 10
reduceRight()
reduceRight() 方法的功能和reduce()功能是一样的,不同的是reduceRight() 从数组的末尾向前将数组中的数组项做累加。
reduceRight() 首次调用回调函数callbackfn 时,preValue 和 curValue 可以是两个值之一。如果调用reduceRight()时提供了第二个参数,则preValue等于该参数,curValue等于数组中的最后一个值。如果没有提供,则preValue等于数组最后一个值,curValue等于数组中倒数第二个值。
var arr = [0, 1, 2, 3, 4];
arr.reduceRight(function(preValue, curValue, index, array) {
console.log(preValue, curValue)
return preValue + curValue;
}); // 10
// 4 3
// 7 2
// 9 1
// 10 0
arr.reduceRight(function(preValue, curValue, index, array) {
console.log(preValue, curValue)
return preValue + curValue;
}, 5) // 15
// 5 4
// 9 3
// 12 2
// 14 1
// 15 0