摘要:可選到該位置前停止讀取數(shù)據(jù),默認等于數(shù)組長度。找出第一個符合條件的數(shù)組元素,參數(shù)是一個回調(diào)函數(shù),所有數(shù)組元素依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為的元素,然后返回該元素。回調(diào)函數(shù)可以接受三個參數(shù),依次為當前的值當前的位置和原數(shù)組。
ECMAScript 5.1 中提供的數(shù)組方法
ECMA-262/5.1 規(guī)范
判斷是否是數(shù)組Array.isArray ( arg ) // false or true
不支持此方法的IE9-等瀏覽器可以這樣處理:
Object.prototype.toString.call(obj) === "[object Array]";轉(zhuǎn)換方法 toString
數(shù)組的 valueOf 會默認調(diào)用 toString 方法,所以他們的返回值一樣,都是逗號分隔每一項組成的字符串
var months = ["Jan", "Feb", "Mar", "Apr"]; months.toString(); // "Jan,Feb,Mar,Apr"toLocaleString
調(diào)用數(shù)組每一項的 toLocaleString 方法,有時和 toString 方法的結(jié)果是一樣的。有時也不同,比如 Date 對象元素組成的數(shù)組里,返回的結(jié)果會不同。
joina.join(); // "Wind,Rain,Fire" a.join(", "); // "Wind, Rain, Fire" a.join(" + "); // "Wind + Rain + Fire" a.join(""); // "WindRainFire"
如果數(shù)組中的某一項的值是 null 或者 undefined,那么該值在 join()、toLocale-String()、toString() 和 valueOf() 方法返回的結(jié)果中以空字符串表示
棧方法 pop 刪除數(shù)組的最后一項操作原數(shù)組,返回刪除項
var a = [1, 2, 3]; var b = a.pop(); console.log(a); // [1, 2] console.log(b); // 3push 在數(shù)組末尾添加新元素
操作的原數(shù)組,返回數(shù)組長度
var a = [1, 2, 3]; var b = a.push(4, 5); console.log(a); // [1, 2, 3, 4, 5] console.log(b); // 5隊列方法 shift 刪除數(shù)組的第一項
操作的原數(shù)組,返回刪除項
var a = [1, 2, 3]; var b = a.shift(); console.log(a); // [2, 3] console.log(b); // 1unshift 數(shù)組的前面添加新元素
操作的原數(shù)組,返回數(shù)組長度
var a = [1, 2, 3]; var b = a.unshift(4, 5); console.log(a); // [4, 5, 1, 2, 3] console.log(b); // 5重排序方法 reverse 反轉(zhuǎn)數(shù)組項的順序
操作原數(shù)組,返回數(shù)組
var a = ["one", "two", "three"]; var b= a.reverse(); console.log(a); // ["three", "two", "one"] console.log(b); // ["three", "two", "one"]sort 排序
按照 Unicode code 位置排序,默認升序
var fruit = ["cherries", "apples", "bananas"]; fruit.sort(); // ["apples", "bananas", "cherries"] var scores = [1, 10, 21, 2]; scores.sort(); // [1, 10, 2, 21] // because "10" is mix of two characters "1" and "0" so "10" is before "2" in Unicode code point order.
之前寫過一篇排序方法的深入解讀,感興趣請點擊這里
深入淺出 JavaScript 的 Array.prototype.sort 排序算法
操作方法 concat 合并數(shù)組返回新數(shù)組
var arr1 = ["a", "b", "c"]; var arr2 = ["d", "e", "f"]; var arr3 = arr1.concat(arr2); console.log(arr3); // expected output: ["a", "b", "c", "d", "e", "f"]slice 基于當前數(shù)組創(chuàng)建新數(shù)組
返回新數(shù)組
傳入兩個參數(shù) 起始位置(包含) 結(jié)束位置(不包含),虎頭蛇尾,有始無終。
只傳一個參數(shù)默認截取到數(shù)組末尾
傳遞的參數(shù)中有一個負數(shù),則用數(shù)組長度加上該數(shù)來確定位置。長度為 5 的數(shù)組 slice(-2,-1) 與 slice(3, 4) 結(jié)果相同。
結(jié)束位置小于起始位置,則返回空數(shù)組
var a = ["1", "2", "3", "4"]; var sliced = a.slice(1, 3); console.log(a); // ["1", "2", "3", "4"] console.log(sliced); // ["2", "3"]splice
可以實現(xiàn) 刪除、插入(元素個數(shù)大于要刪除的元素個數(shù))、替換(刪除一個,再添加一個)
返回被刪除元素組成的數(shù)組,如果沒有被刪除元素,返回空數(shù)組
參數(shù): 起始位置(包含)、要刪除的元素個數(shù)、元素
var myFish = ["angel", "clown", "mandarin", "sturgeon"]; myFish.splice(2, 0, "drum"); // ["angel", "clown", "drum", "mandarin", "sturgeon"] myFish.splice(2, 1); // ["angel", "clown", "mandarin", "sturgeon"] myFish.splice(-1, 0, "drum"); //["angel", "clown", "mandarin", "drum", "sturgeon"]位置方法
indexOf 和 lastIndexOf 都接受兩個參數(shù):查找的值、查找起始位置
不存在,返回 -1 ;存在,返回位置。indexOf 是從前往后查找, lastIndexOf 是從后往前查找。
indexOfvar a = [2, 9, 9]; a.indexOf(2); // 0 a.indexOf(7); // -1 if (a.indexOf(7) === -1) { // element doesn"t exist in array }lastIndexOf
var numbers = [2, 5, 9, 2]; numbers.lastIndexOf(2); // 3 numbers.lastIndexOf(7); // -1 numbers.lastIndexOf(2, 3); // 3 numbers.lastIndexOf(2, 2); // 0 numbers.lastIndexOf(2, -2); // 0 numbers.lastIndexOf(2, -1); // 3迭代方法
ECMAScript 5 提供了5個迭代方法,他們的參數(shù)都是
給定的函數(shù)(當前元素、位置、數(shù)組)
可選的,執(zhí)行回調(diào)是的 this 值
every對數(shù)組的每一項都運行給定的函數(shù),每一項都返回 ture,則返回 true
function isBigEnough(element, index, array) { return element < 10; } [2, 5, 8, 3, 4].every(isBigEnough); // truesome
對數(shù)組的每一項都運行給定的函數(shù),任意一項都返回 ture,則返回 true
function isBiggerThan10(element, index, array) { return element > 10; } [2, 5, 8, 1, 4].some(isBiggerThan10); // false [12, 5, 8, 1, 4].some(isBiggerThan10); // truefilter
對數(shù)組的每一項都運行給定的函數(shù),返回 結(jié)果為 ture 的項組成的數(shù)組
var words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"]; var longWords = words.filter(function(word){ return word.length > 6; }); // Filtered array longWords is ["exuberant", "destruction", "present"]map
對數(shù)組的每一項都運行給定的函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成一個新數(shù)組
var numbers = [1, 5, 10, 15]; var doubles = numbers.map(function(x) { return x * 2; }); // doubles is now [2, 10, 20, 30] // numbers is still [1, 5, 10, 15]forEach 數(shù)組遍歷
const items = ["item1", "item2", "item3"]; const copy = []; items.forEach(function(item){ copy.push(item) });縮小方法
reduce、reduceRight 一個是從前往后遍歷,一個是從后往前遍歷,比上面的五個迭代方法回調(diào)函數(shù)多了一個參數(shù):上一項的值
回調(diào)函數(shù)參數(shù) 上一項、當前元素、位置、數(shù)組
reducevar numbers = [0, 1, 2, 3]; var result = numbers.reduce(function(accumulator, currentValue) { return accumulator + currentValue; }); console.log(result); // expected output: 6reduceRight
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) { return a.concat(b); }, []); // flattened is [4, 5, 2, 3, 0, 1]小總結(jié)
隊列方法和棧方法操作的都是原數(shù)組,增加數(shù)組元素的時候,返回值是數(shù)組長度;刪除數(shù)組元素的時候,返回值是被刪除的元素。
哪些方法改變了原數(shù)組?棧方法:push、pop
隊列方法:shift、unshift
重排序方法:reverse、sort
哪些方法返回的是數(shù)組?重排序方法:reverse、sort
操作方法:splice、slice、concat
迭代方法中:filter、map
ECMAScript 6.0 新增的方法ECMA-262/6.0 規(guī)范
from將類似數(shù)組的對象(array-like object)和可遍歷(iterable)的對象轉(zhuǎn)為真正的數(shù)組
const bar = ["a", "b", "c"]; Array.from(bar); // ["a", "b", "c"] Array.from("foo"); // ["f", "o", "o"]of
用于將一組值,轉(zhuǎn)換為數(shù)組
這個方法的主要目的,是彌補數(shù)組構(gòu)造函數(shù) Array() 的不足。因為參數(shù)個數(shù)的不同,會導致 Array() 的行為有差異。
Array() // [] Array(3) // [, , ,] Array(3, 11, 8) // [3, 11, 8]
Array.of(7); // [7] Array.of(1, 2, 3); // [1, 2, 3] Array(7); // [ , , , , , , ] Array(1, 2, 3); // [1, 2, 3]copyWithin
將指定位置的元素復(fù)制到其他位置(會覆蓋原有元素),返回當前數(shù)組。該方法會修改當前數(shù)組。
它接受三個參數(shù)。
target(必需):從該位置開始替換數(shù)據(jù)。
start(可選):從該位置開始讀取數(shù)據(jù),默認為0。如果為負值,表示倒數(shù)。
end(可選):到該位置前停止讀取數(shù)據(jù),默認等于數(shù)組長度。如果為負值,表示倒數(shù)。
[1, 2, 3, 4, 5].copyWithin(-2); // [1, 2, 3, 1, 2] [1, 2, 3, 4, 5].copyWithin(0, 3); // [4, 5, 3, 4, 5] [1, 2, 3, 4, 5].copyWithin(0, 3, 4); // [4, 2, 3, 4, 5] [1, 2, 3, 4, 5].copyWithin(-2, -3, -1); // [1, 2, 3, 3, 4]fill
使用給定值,填充一個數(shù)組。
會抹除數(shù)組原有的元素
還可以接受第二個和第三個參數(shù),用于指定填充的起始位置和結(jié)束位置。
var numbers = [1, 2, 3] numbers.fill(1); // results in [1, 1, 1] ["a", "b", "c"].fill(7, 1, 2) // ["a", 7, "c"]find
找出第一個符合條件的數(shù)組元素,參數(shù)是一個回調(diào)函數(shù),所有數(shù)組元素依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為 true 的元素,然后返回該元素。如果沒有符合條件的元素,則返回 undefined?;卣{(diào)函數(shù)可以接受三個參數(shù),依次為當前的值、當前的位置和原數(shù)組。
[1, 5, 10, 15].find(function(value, index, arr) { return value > 9; }) // 10 [1, 5, 2, 3].find(function(value, index, arr) { return value > 9; }) // undefinedfindIndex
findIndex 方法的用法與 find 方法非常類似,返回第一個符合條件的數(shù)組元素的位置,如果所有元素都不符合條件,則返回 -1。
[1, 5, 10, 15].findIndex(function(value, index, arr) { return value > 9; }) // 2
ES6 提供三個新的方法—— entries(),keys()和 values() —— 用于遍歷數(shù)組。它們都返回一個遍歷器對象,可以用 for...of 循環(huán)進行遍歷,唯一的區(qū)別是 keys() 是對鍵名的遍歷、values() 是對鍵值的遍歷,entries() 是對鍵值對的遍歷。
for (let index of ["a", "b"].keys()) { console.log(index); } // 0 // 1 for (let elem of ["a", "b"].values()) { console.log(elem); } // "a" // "b" for (let [index, elem] of ["a", "b"].entries()) { console.log(index, elem); } // 0 "a" // 1 "b"entries
var a = ["a", "b", "c"]; var iterator = a.entries(); console.log(iterator.next().value); // [0, "a"] console.log(iterator.next().value); // [1, "b"] console.log(iterator.next().value); // [2, "c"]keys
var arr = ["a", "b", "c"]; var iterator = arr.keys(); console.log(iterator.next()); // { value: 0, done: false } console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: undefined, done: true }values
var a = ["w", "y", "k", "o", "p"]; var iterator = a.values(); console.log(iterator.next().value); // w console.log(iterator.next().value); // y console.log(iterator.next().value); // k console.log(iterator.next().value); // o console.log(iterator.next().value); // p
更多使用方式,可以參考 阮一峰 ECMAScript 6入門
ECMAScript 7.0 新增的方法ECMA-262/7.0 規(guī)范
includes判斷數(shù)組中是否存在該元素
參數(shù):查找的值、起始位置
可以替換 ES5 時代的 indexOf 判斷方式
indexOf 判斷元素是否為 NaN,會判斷錯誤
var a = [1, 2, 3]; a.includes(2); // true a.includes(4); // false
ECMA-262/8.0 規(guī)范
ES8 沒增加數(shù)組方法
參考JavaScript 高級程序設(shè)計
MDN web docs
阮一峰 ECMAScript 6入門
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/89570.html
網(wǎng)上很少有提供不同版本接口對比的文章,所以自己總結(jié)一下。 Array Method Description Modify Version concat 連接多個數(shù)組,返回數(shù)組副本,參數(shù)可以為值或數(shù)組 否 ES3 join 把數(shù)組元素組合為字符串 否 ES3 pop 刪除并返回最后一個元素 是 ES3 push 向數(shù)組末尾添加一個或多個值,返回數(shù)組長度 是 ES3 reve...
摘要:創(chuàng)建對象的兩種方式推薦該構(gòu)造器可以接受任何類型的參數(shù),并且會自動識別參數(shù)的類型,并選擇更合適的構(gòu)造器來完成相關(guān)操作。比如二的成員該屬性指向用來構(gòu)造該函數(shù)對象的構(gòu)造器,在這里為該方法返回的是一個用于描述目標對象的字符串。 之前看到【深度長文】JavaScript數(shù)組所有API全解密和JavaScript字符串所有API全解密這兩篇高質(zhì)量的文章。發(fā)現(xiàn)沒寫對象API解析(估計是博主覺得簡單,...
摘要:定期召開會議,會議由會員公司的代表與特邀專家出席。新版本將會包含每年截止時間之前完成的所有特性。它引入了一個新的構(gòu)造函數(shù)和具有輔助函數(shù)的命名空間對象。 導言:ECMAScript的演化不會停止,但是我們完全沒必要害怕。除了ES6這個史無前例的版本帶來了海量的信息和知識點以外,之后每年一發(fā)的版本都僅僅帶有少量的增量更新,一年更新的東西花半個小時就能搞懂了,完全沒必要畏懼。本文將帶您花大約...
摘要:距離上一篇走馬觀花已經(jīng)快兩年時間了,上個月底正式發(fā)布,再寫一篇姊妹篇,介紹新特性。會議的每一項決議必須大部分人贊同,并且沒有人強烈反對才可以通過。已經(jīng)準備就緒,該特性會出現(xiàn)在年度發(fā)布的規(guī)范之中。 距離上一篇《ES6 走馬觀花》已經(jīng)快兩年時間了,上個月底 ES8 正式發(fā)布,再寫一篇姊妹篇,介紹 ES8 新特性。 什么是 ES8 ES8 是 ECMA-262 標準第 8 版的簡稱,從 ES...
閱讀 805·2021-09-22 16:01
閱讀 2098·2021-08-20 09:37
閱讀 1702·2019-08-30 15:54
閱讀 1700·2019-08-30 15:44
閱讀 846·2019-08-28 18:23
閱讀 3024·2019-08-26 12:17
閱讀 1026·2019-08-26 11:56
閱讀 1548·2019-08-23 16:20