1.reduce方法
reduce方法從左到右用來迭代數(shù)組的所有項,然后構(gòu)建一個最終的返回值啤呼。
語法:
arr.reduce(callback,初始化值)
reduce為數(shù)組中的每一個元素依次執(zhí)行callback函數(shù),不包括數(shù)組中被刪除或從未被賦值的元素岭参,接受四個參數(shù):
accumulator -------未提供初始值時稿辙,默認(rèn)是數(shù)組的第一個元素
currentValue -------數(shù)組當(dāng)前值
currentIndex -------數(shù)組當(dāng)前索引
array------------------當(dāng)前數(shù)組
應(yīng)用:
1.數(shù)組里所有值求和
var sum = [1,2,3,4].reduce(function(pre,cur){
return pre +cur;
},0);
//sum is 10
2.計算數(shù)組中每個元素出現(xiàn)的次數(shù)
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.數(shù)組去重
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方法從右到左用來迭代數(shù)組的所有項憨琳,然后構(gòu)建一個最終的返回值。
reduce和reduceRight區(qū)別
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() 方法返回一個從開始到結(jié)束(不包括結(jié)束)選擇的數(shù)組的一部分淺拷貝到一個新數(shù)組對象旬昭。且原始數(shù)組不會被修改篙螟。
語法:
arr.slice(begin(可選),end(可選)),默認(rèn)從0開始问拘,支持輸入負(fù)數(shù)遍略。如果該參數(shù)為負(fù)數(shù), 則它表示在原數(shù)組中的倒數(shù)第幾個元素結(jié)束抽取骤坐。
1.返回現(xiàn)有數(shù)組的一部分
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.把類數(shù)組轉(zhuǎn)成真正的數(shù)組
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
或者用ES6的方法 array.from();
3.生成一個新的數(shù)組
arr.slice();
4.every()方法
every() 方法測試數(shù)組的所有元素是否都通過了指定函數(shù)的測試绪杏。
1.檢測所有數(shù)組的大小
檢測數(shù)組中的元素是否都大于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() 方法測試數(shù)組中的某些元素是否通過由提供的函數(shù)實現(xiàn)的測試。
const isBiggerThan10 = (element, index, array) => {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);
// false
[12, 5, 8, 1, 4].some(isBiggerThan10);
// true