js陣列的遍歷方法filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()
filter():
語法:
var filteredArray
= array.filter(callback[, thisObject]);
|
引數說明:
callback: 要對每個陣列元素執行的回撥函式。
thisObject : 在執行回撥函式時定義的this物件。
//過濾掉小於 10 的陣列元素: //程式碼: function isBigEnough(element, index, array) { return (element >= 10); } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);// 12, 130, 44 //結果:[12, 5, 8, 130, 44].filter(isBigEnough) : 12, 130, 44
功能說明:
對陣列中的每個元素都執行一次指定的函式(callback),並且建立一個新的陣列,該陣列元素是所有回撥函式執行時返回值為 true 的原陣列元素。它只對陣列中的非空元素執行指定的函式,沒有賦值或者已經刪除的元素將被忽略,同時,新建立的陣列也不會包含這些元素。
回撥函式可以有三個引數:當前元素,當前元素的索引和當前的陣列物件。
如引數 thisObject 被傳遞進來,它將被當做回撥函式(callback)內部的 this 物件,如果沒有傳遞或者為null,那麼將會使用全域性物件。
filter 不會改變原有陣列,記住:只有在回撥函式執行前傳入的陣列元素才有效,在回撥函式開始執行後才新增的元素將被忽略,而在回撥函式開始執行到最後一個元素這一期間,陣列元素被刪除或者被更改的,將以回撥函式訪問到該元素的時間為準,被刪除的元素將被忽略。
map():
//將所有的陣列元素轉換為大寫: var strings = ["hello", "Array", "WORLD"]; function makeUpperCase(v) { return v.toUpperCase(); } var uppers = strings.map(makeUpperCase); // uppers is now ["HELLO", "ARRAY", "WORLD"]// strings is unchanged //結果:["hello", "Array", "WORLD"].map(makeUpperCase) : HELLO, ARRAY, WORLD
some():
對陣列中的每個元素都執行一次指定的函式(callback),直到此函式返回 true,如果發現這個元素,some 將返回 true,如果回撥函式對每個元素執行後都返回 false ,some 將返回 false。它只對陣列中的非空元素執行指定的函式,沒有賦值或者已經刪除的元素將被忽略。
//檢查是否有陣列元素大於等於10: function isBigEnough(element, index, array) { return (element >= 10); } var passed = [2, 5, 8, 1, 4].some(isBigEnough); // passed is false passed = [12, 5, 8, 1, 4].some(isBigEnough); // passed is true //結果: //[2, 5, 8, 1, 4].some(isBigEnough) : false //[12, 5, 8, 1, 4].some(isBigEnough) : true
every():
對陣列中的每個元素都執行一次指定的函式(callback),直到此函式返回 false,如果發現這個元素,every 將返回 false,如果回撥函式對每個元素執行後都返回 true ,every 將返回 true。它只對陣列中的非空元素執行指定的函式,沒有賦值或者已經刪除的元素將被忽略
//測試是否所有陣列元素都大於等於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 //結果: //[12, 5, 8, 130, 44].every(isBigEnough) 返回 : false //[12, 54, 18, 130, 44].every(isBigEnough) 返回 : true
forEach():
//列印陣列內容: function printElt(element, index, array) { document.writeln("[" + index + "] is " + element + "<br />"); } [2, 5, 9].forEach(printElt); // Prints: // [0] is 2 // [1] is 5 // [2] is 9 //結果: //[0] is 2 //[1] is 5 //[2] is 9
lastIndexOf():
語法
var index = array.lastIndexOf(searchElement[, fromIndex]);
引數說明
searchElement: 要搜尋的元素
fromIndex : 開始搜尋的位置,預設為陣列的長度(length),在這樣的情況下,將搜尋所有的陣列元素。搜尋是反方向進行的。
功能說明
比較 searchElement 和陣列的每個元素是否絕對一致(===),當有元素符合條件時,返回當前元素的索引。如果沒有發現,就直接返回 -1 。
//查詢符合條件的元素: var array = [2, 5, 9, 2]; var index = array.lastIndexOf(2); // index is 3 index = array.lastIndexOf(7); // index is -1 index = array.lastIndexOf(2, 3); // index is 3 index = array.lastIndexOf(2, 2); // index is 0 index = array.lastIndexOf(2, -2); // index is 0 index = array.lastIndexOf(2, -1); // index is 3 //結果: //[2, 5, 9, 2].lastIndexOf(2) : 3 //[2, 5, 9, 2].lastIndexOf(7) : -1 //[2, 5, 9, 2].lastIndexOf(2, 3) : 3 //[2, 5, 9, 2].lastIndexOf(2, 2) : 0 //[2, 5, 9, 2].lastIndexOf(2, -2) : 0 //[2, 5, 9, 2].lastIndexOf(2, -1) : 3
indexOf():
功能與lastIndexOf()一樣,搜尋是正向進行的
//查詢符合條件的元素: var array = [2, 5, 9]; var index = array.indexOf(2); // index is 0 index = array.indexOf(7); // index is -1 //結果: //[2, 5, 9].indexOf(2) : 0 //[2, 5, 9].indexOf(7) : -1