標籤:java os io art for cti
數組遍曆方法對比 forEach函數
函數說明: forEach(f [,o]): 此方法類似於for/in迴圈,其作用是遍曆整個數組並執行函數的某些操作,但它不會遍曆數組的屬性。它接受一個函數參數,該函數可以有1、2與3個參數。完整的三個參數分別為:數組中的每一個值,數組的索引,數組本身。這個函數沒有傳回值。
擷取數組方法:
function getArray(){ var a = new Array(10); for(var i=0, j=a.length; j>i; i++) a[i] = i+1; return a;}
測試方法:
function testForEach(){ var a = getArray(); var b = a.forEach(function(e, i){ console.log(e, i); if(0 === e % 2) return false; else return true; }); return [a, b];}testForEach()// @return [ [1-10], undefined ]
總結:
- 參數第一個是elem,第二個才是index,這個和jQuery的$.fn.each方法不同;
- 返回預設是undefined;
- 對原數組沒有影響。
map函數
函數說明:類似於forEach()方法,但它有傳回值—一個新數組,它的參數函數必須有傳回值,參數函數的傳回值作為新數組的元素。其它用法與forEach()方法類似。
測試方法:
function testForEach(){ var a = getArray(); var b = a.map(function(e, i){ console.log(e, i); if(0 === e % 2) return false; else return true; }); return [a, b];}testForEach()// @return [ [1-10], [true, false, true, false , ... ] ]
總結:
- 參數也分別是elem, index;
- 返回是一個數組,包含的元素是每個迭代的返回內容;
- 對原數組沒有影響
filter函數
函數說明:對數組元素進行過濾,返回一個符合要求的新數組。
測試方法:
function testForEach(){ var a = getArray(); var b = a.filter(function(e, i){ console.log(e, i); if(0 === e % 2) return false; else return true; }); return [a, b];}testForEach()// @return [ [1-10], [1,3,5,7,9] ]
總結:
- 參數也分別是elem, index;
- 返回是一個數組,在迭代裡返回true才會被push在返回的數組裡
- 對原數組沒有影響
every函數
函數說明:有一個布爾類型的傳回值,函數參數f用來檢測數組元素是否滿足要求。有且只有數組全部元素都滿足f的要求時,才會返回true,否則返回false。
測試方法:
function testForEach(){ var a = getArray(); var b = a.every(function(e, i){ console.log(e, i); if(0 === e % 2) return false; else return true; }); return [a, b];}testForEach()// @return [ [1-10], false ]function testForEach(){ var a = getArray(); var b = a.every(function(e, i){ console.log(e, i); return true; // 直接改返回true }); return [a, b];}testForEach()// @return [ [1-10], true ]
總結:
- 參數也分別是elem, index
- 不影響原數組
- 在迭代中,一旦返回false,那就會中斷迭代,返回false; 如果順利迭代完成,則返回true;
some函數
函數說明:與every()方法不同,只要有數組元素滿足f的要求就返回true,否則返回false。
function testForEach(){ var a = getArray(); var b = a.some(function(e, i){ console.log(e, i); if(0 === e % 2) return false; else return true; }); return [a, b];}// @return [ [1-10], true ]
總結:
- 參數都也elem, index
- 不影響原數組
- 在迭代中,一旦返回false,那就會中斷迭代,但如果之前有一個返回true的也會返回true,如果沒就返回false;如果順利迭代完成,則返回true;
reduce函數
函數說明: reduce(f [, initial, index, array]): 對數組元素值進行計算。返回最後一次計算的值。函數f(x,y)接受兩個參數,如果有初始值,則把初始值作為x計算,然後把每一次的計算值作為下一次的x,把數組元素依次作為y。
a.reduce(function(x, y){console.log(x, y); return x + y;}, 0)// 0 1 VM1124:2// 1 2 VM1124:2// 3 3 VM1124:2// 6 4 VM1124:2// 10 5 VM1124:2// 15 6 VM1124:2// 21 7 VM1124:2// 28 8 VM1124:2// 36 9 VM1124:2// 45 10 VM1124:2// 55
reduceRight(): 與reduce()函數作用相同,只是它從右向左依次取數組元素。
indexOf函數
indexOf(value [, start]): 根據值來找到相應在數組中的索引位置,取多個匹配索引用最小的那個或在沒有匹配的情況下返回-1。
lastIndexOf(value [, start]): 與indexOf()函數相似,只是它是從後面向前面進行搜尋。