ES6數組方法


ES6數組方法

以下方法添加到了Array.prototype對象上(isArray除外)

indexOf

類似字符串的indexOf()方法

1 stringObject.indexOf(searchvalue,fromindex)
2 
3 var data = [2, 5, 7, 3, 5];
4 console.log(data.indexOf(5, "x")); // 1 ("x"被忽略)
5 console.log(data.indexOf(5, "3")); // 4 (從3號位開始搜索)
6 console.log(data.indexOf(4)); // -1 (未找到)
7 console.log(data.indexOf("5")); // -1 (未找到,因為5 !== "5")

lastIndexOf

類似indexOf()方法(順序相反)

forEach

Array在ES5新增的方法中,參數都是function類型,默認有傳參(遍歷的數組內容,對應的數組索引,數組本身)

[].forEach(function(value, index, array) { // ... });

forEach方法 遍歷數組元素

1 var colors = ['red', 'green', 'blue'];
2 colors.forEach(function(color) { 
3     console.log(color);
4 });

forEach除了接受一個必須的回調函數參數,還可以接受一個可選的上下文參數(改變回調函數里面的this指向)(第2個參數)如果這第2個可選參數不指定,則使用全局對象代替(在瀏覽器是為window),嚴格模式下甚至是undefined

array.forEach(callback,[ thisObject])

map

映射(一一對應)。[].map();基本用法跟forEach方法類似:

array.map(callback,[ thisObject]);

但是callback需要有return值(如果沒有,就像會返回undefined)

1 var a1 = ['a', 'b', 'c'];
2 var a2 = a1.map(function(item) { 
3     return item.toUpperCase(); 
4 });
5 console.log(a2); // logs A,B,C

filter

過濾篩選(callback在這里擔任的是過濾器的角色,當元素符合條件,過濾器就返回true,而filter則會返回所有符合過濾條件的元素)。

array.filter(callback,[ thisObject]);

指數組filter后,返回過濾后的新數組。用法跟map相似

1 var a1 = ['a', 10, 'b', 20, 'c', 30];
2 var a2 = a1.filter(function(item) { 
3     return typeof item == 'number'; 
4 });
5 console.log(a2); // logs 10,20,30

every(且)

every(callback[, thisObject])當數組中每一個元素在callback上被返回true時就返回true。

1 function isNumber(value){ 
2     return typeof value == 'number';
3 }
4 var a1 = [1, 2, 3];
5 console.log(a1.every(isNumber)); // logs true
6 var a2 = [1, '2', 3];
7 console.log(a2.every(isNumber)); // logs false

some(或)

some(callback[, thisObject]) 只要數組中有一項在callback上被返回true,就返回true。

1 function isNumber(value){ 
2 return typeof value == 'number';
3 }
4 var a1 = [1, 2, 3];
5 console.log(a1.some(isNumber)); // logs true
6 var a2 = [1, '2', 3];
7 console.log(a2.some(isNumber)); // logs true
8 var a3 = ['1', '2', '3'];
9 console.log(a3.some(isNumber)); // logs false

 

 

reduce(從左到右累加)

對數組中的所有元素調用指定的回調函數。該回調函數的返回值為累積結果,並且此返回值在下一次調用該回調函數時作為參數提供。

1 var a = [10, 20, 30];
2 var total = a.reduce(function(first, second) { 
3     return first + second; 
4 }, 0);
5 console.log(total) // Prints 60

reduceRight(從右到左累加)

reduce的作用完全相同,唯一的不同是,reduceRight是從右至左遍歷數組的元素。

Array構造器上的isArray

Array.isArray直接寫在了Array構造器上,而不是prototype對象上。Array.isArray會根據參數的[[Class]]內部屬性是否是”Array”返回true或false.

Array.isArray("NO U") falseArray.isArray(["NO", "U"])// true

Array.prototype.slice.call

真實數組具有slice方法,可以對數組進行淺復制(不影響原數組),返回的依然是數組。類似數組雖然有length屬性,可以使用for循環遍歷,卻不能直接使用slice方法,會報錯!但是通過Array.prototype.slice.call則不會報錯,本身(類似數組)被從頭到尾slice復制了一遍——變成了真實數組!

將類似數組的對象(比如arguments)轉換為真實的數組

 
Array.prototype.slice.call(arguments)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM