1. 程式人生 > >js陣列的遍歷方法filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()

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 
複製程式碼