1.reduce方法
reduce方法从左到右用来迭代数组的所有项,然后构建一个最终的返回值。
语法:
arr.reduce(callback,初始化值)
reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:
accumulator -------未提供初始值时,默认是数组的第一个元素
currentValue -------数组当前值
currentIndex -------数组当前索引
array------------------当前数组
应用:
1.数组里所有值求和
var sum = [1,2,3,4].reduce(function(pre,cur){
return pre +cur;
},0);
//sum is 10
2.计算数组中每个元素出现的次数
var names = ['Alice','Bob','Tiff','Bruce','Alice'];
var countedNames = names.reduce(function(allNames,name){
if(name in allNames){
allNames[name]++;
}else{
allNames[name]=1;
}
return allNames;
},{});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
3.数组去重
var arr=[1,2,1,2,3,3,4,4,5,6,7];
var nArr = arr.sort().reduce(function(initValue,current){
if(initValue[initValue.length-1]!==current){
initValue.push(current);
}
return initValue;
},[])
//nArr [1,2,3,4,5,6,7]
2.reduceRight方法
reduceRight方法从右到左用来迭代数组的所有项,然后构建一个最终的返回值。
reduce和reduceRight区别
var a =['1','2','3','4','5','6'];
var left = a.reduce(function(pre,cur){return pre +cur;});
var right = a.reduceRight(function(pre,cur){return pre +cur});
//left '12345'
//right '54321'
3.slice方法
slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。
语法:
arr.slice(begin(可选),end(可选)),默认从0开始,支持输入负数。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。
1.返回现有数组的一部分
var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];
var citrus = fruits.slice(1, 3);
// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
// citrus contains ['Orange','Lemon']
2.把类数组转成真正的数组
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
或者用ES6的方法 array.from();
3.生成一个新的数组
arr.slice();
4.every()方法
every() 方法测试数组的所有元素是否都通过了指定函数的测试。
1.检测所有数组的大小
检测数组中的元素是否都大于10
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
5.some()方法
some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试。
const isBiggerThan10 = (element, index, array) => {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);
// false
[12, 5, 8, 1, 4].some(isBiggerThan10);
// true