3粒蜈、some蚀狰、every
some : some() 方法測試數(shù)組中的某些元素是否通過由提供的函數(shù)實現(xiàn)的測試
語法: arr.some(callback[, thisArg])
some 為數(shù)組中的每一個元素執(zhí)行一次 callback 函數(shù),直到找到一個使得 callback 返回一個“真值”(即可轉(zhuǎn)換為布爾值 true 的值)襟铭。如果找到了這樣一個值,some 將會立即返回 true。否則碎绎,some 返回 false
demo
function isBigEnough(element, index, array) {
return element >= 10;
}
var pass1 = [2, 5, 8, 1, 4].some(isBigEnough);
var pass2 = [12, 5, 8, 1, 4].some(isBigEnough);
console.log(pass1) //false
console.log(pass2) //true
every: every() 方法測試數(shù)組的所有元素是否都通過了指定函數(shù)的測試。
語法: arr.some(callback[, thisArg])
every 方法為數(shù)組中的每個元素執(zhí)行一次 callback 函數(shù)抗果,直到它找到一個使 callback 返回 false(表示可轉(zhuǎn)換為布爾值 false 的值)的元素筋帖。如果發(fā)現(xiàn)了一個這樣的元素,every 方法將會立即返回 false冤馏。否則日麸,callback 為每一個元素返回 true,every 就會返回 true逮光。
demo
function isBigEnough(element, index, array) {
return element >= 10;
}
var pass1 = [12, 15, 8, 11, 4].every(isBigEnough);
var pass2 = [12, 15, 18, 11, 14].every(isBigEnough);
console.log(pass1) //false
console.log(pass2) //true
4代箭、indexOf、lastIndexOf
indexOf()方法返回在數(shù)組中可以找到一個給定元素的第一個索引涕刚,如果不存在嗡综,則返回-1。
語法: arr.indexOf(searchElement[, fromIndex = 0])
- searchElement : 要查找的元素
- fromIndex: 可選參數(shù)副女,開始查找的位置
demo1:找出指定元素出現(xiàn)的所有位置
var arr = ['a','b','a', 'c', 'a', 'd']
var element = 'a'
var index = arr.indexOf(element)
var indices = []
while( index!=-1 ) {
indices.push(index);
index = arr.indexOf(element,index+1)
}
console.log(indices); //[0,2,4]
lastIndexOf和indexOf類似蛤高,只不過是從后面開始索引蚣旱,詳細可參考MDN的lastIndexOf
4、reduce戴陡、reduceRight
reduce: reduce() 方法對累加器和數(shù)組中的每個元素 (從左到右)應(yīng)用一個函數(shù)塞绿,將其“減少”為單個值,其實功能更接近于“迭代恤批、遞歸”
語法: arr.reduce(callback,[initialValue])
callback包含四個參數(shù)
- accumulator
上一次調(diào)用回調(diào)返回的值异吻,或者是提供的初始值(initialValue) - currentValue
數(shù)組中正在處理的元素 - currentIndex
數(shù)據(jù)中正在處理的元素索引,如果提供了 initialValue 喜庞,從0開始诀浪;否則從1開始 - array
調(diào)用 reduce 的數(shù)組
initialValue為可選參數(shù),其值用于第一次調(diào)用 callback 的第一個參數(shù)
如何調(diào)用:
reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù)延都,回調(diào)函數(shù)callback第一次執(zhí)行時雷猪,accumulator 和 currentValue 的取值有兩種情況:
1、調(diào)用 reduce 時提供initialValue晰房,accumulator 取值為 initialValue 求摇,currentValue 取數(shù)組中的第一個值;
2殊者、沒有提供 initialValue 与境,accumulator 取數(shù)組中的第一個值,currentValue 取數(shù)組中的第二個值猖吴。
demo1:一個簡單的例子
var arr= [0,1,2,3,4]
var a = arr.reduce(function(accumulator, currentValue, currentIndex, array){
return accumulator + currentValue;
});
console.log(a) //10
callback 被調(diào)用四次,其每次調(diào)用各參數(shù)的取值和返回值如下:
demo2:二維數(shù)組的扁平化
var matrix = [
[1, 2],
[3, 4],
[5, 6]
];
var flat = matrix.reduce(function(a,b) {
return a.concat(b)
});
console.log(flat); //output : [1, 2, 3, 4, 5, 6]
reduceRight于reduce相比摔刁,用法類似
array.reduceRight(callback[, initialValue])
,差異在于reduceRight是從數(shù)組的末尾開始實現(xiàn),更多可參考MDN的reduceRight
5、進一步的應(yīng)用
可以將數(shù)組的這些方法應(yīng)用到其他對象上海蔽,這里舉一個forEach遍歷DOM元素的例子
var ele = document.querySelectorAll('div');
//這里相當于借用了Array.prototype.forEach方法
Array.prototype.forEach.call(ele function(div) {
console.log("該div類名是:" + (div.className || "空"));
});
這些我們可以拓展我們平時遇到的一些類數(shù)組都可以通過這樣的原理來賦予其數(shù)組的方法共屈,哇JavaScript是不是很靈活、很強大