JavaScript中數(shù)組Array方法詳解
ECMAScript 3在Array.prototype中定義了一些很有用的操作數(shù)組的函數(shù),這意味著這些函數(shù)作為任何數(shù)組的方法都是可用的。
1、Array.join()方法
Array.join()方法將數(shù)組中所有元素都轉(zhuǎn)化為字符串并連接在一起,返回最后生成的字符串??梢灾付ㄒ粋€(gè)可選的符號(hào)或字符串在生成的字符串中來(lái)分隔數(shù)組的各個(gè)元素。如果不指定分隔符,默認(rèn)使用逗號(hào)。注意:此方法不會(huì)改變?cè)紨?shù)組
var arr = ['a', 'b', 'c']; console.log(arr.join()); // a,b,c console.log(arr.join(" ")); // a b c console.log(arr.join("")); // abc console.log(arr.join("slf")); // aslfbslfc var arr2 = new Array(10); console.log(arr2.join("-")); // ---------
擴(kuò)展:Array.join()方法是String.split()方法的逆向操作,后者是將字符串分割成若干塊來(lái)創(chuàng)建一個(gè)數(shù)組。
2、Array.reverse()方法
Array.reverse()方法將數(shù)組中的元素顛倒順序,返回逆序的數(shù)組。它采取了替換;換句話說(shuō),它不通過(guò)重新排列的元素創(chuàng)建新的數(shù)組,而是在原先的數(shù)組中重新排列它們。注意:此方法會(huì)改變?cè)紨?shù)組。
var arr = ['a', 'b', 'c']; console.log(arr.reverse()); // ['c', 'b', 'a'] console.log(arr); // ['c', 'b', 'a']
3、Array.sort()方法
Array.sort()方法將數(shù)組中的元素排序并返回排序后的數(shù)組。當(dāng)不帶參數(shù)調(diào)用sort()方法時(shí),數(shù)組元素以字母表順序排序。注意:此方法會(huì)改變?cè)紨?shù)組。
var arr = ['ba', 'b', 'ac']; console.log(arr.sort()); // ['ac', 'b', 'ba'] console.log(arr); // ['ac', 'b', 'ba']
如果數(shù)組包含undefined元素,它們會(huì)被排到數(shù)組的尾部。
var arr = new Array(4); arr[0] = 'ba'; arr[1] = 'b'; arr[2] = 'zc'; arr[3] = undefined; console.log(arr.sort()); // ['ac', 'b', 'ba', undefined] console.log(arr); // ['ac', 'b', 'ba', undefined]
如果想按照其他方式而非字母表順序進(jìn)行數(shù)組排序,則必須給sort()方法傳遞一個(gè)比較函數(shù)。該函數(shù)決定了它的兩個(gè)參數(shù)在排好序的數(shù)組中的先后順序。假設(shè)第一個(gè)參數(shù)在前,比較函數(shù)應(yīng)該返回一個(gè)小于0的數(shù)值。反之,假設(shè)第一個(gè)參數(shù)在后,函數(shù)應(yīng)該返回一個(gè)大于0的數(shù)值。并且,假設(shè)兩個(gè)值相等(它們的順序無(wú)關(guān)緊要),函數(shù)應(yīng)該返回0。例如,用數(shù)值大小而非字母表順序進(jìn)行數(shù)組排序,代碼如下:
var arr = new Array(4); arr[0] = 45; arr[1] = 12; arr[2] = 103; arr[3] = 24; console.log(arr.sort()); // [103, 12, 24 45] console.log(arr.sort(function(a, b){return b-a;})); // [103, 45, 24, 12]
有時(shí)候需要對(duì)一個(gè)字符串?dāng)?shù)組執(zhí)行不區(qū)分大小寫的字母表排序,這時(shí)可以使用比較函數(shù),首先將參數(shù)都轉(zhuǎn)化為小寫字符串(使用toLowerCase()方法),再開始比較。
var arr = ['abc', 'Def', 'BoC', 'FED']; console.log(arr.sort()); // ["BoC", "Def", "FED", "abc"] console.log(arr.sort(function(s, t){ var a = s.toLowerCase(); var b = t.toLowerCase(); if (a < b) return -1; if (a > b) return 1; return 0; })); // ["abc", "BoC", "Def", "FED"]
4、Array.concat()方法
Array.concat()方法創(chuàng)建并返回一個(gè)新數(shù)組,它的元素包括調(diào)用concat()的原始數(shù)組的元素和concat()的每個(gè)參數(shù)。如果這些參數(shù)中的任何一個(gè)自身是數(shù)組,則連接的是數(shù)組的元素,而非數(shù)組本身。但要注意,concat()不會(huì)遞歸扁平化數(shù)組的數(shù)組。注意:此方法
不會(huì)修改原始數(shù)組。
var arr = ['abc', 'Def', 'BoC', 'FED']; console.log(arr.concat(1, 2)); // ["abc", "Def", "BoC", "FED", 1, 2] console.log(arr.concat(1, 2, [4, 5])); // ["abc", "Def", "BoC", "FED", 1, 2, 4, 5] console.log(arr.concat(1, 2, [4, ['slf', 5]])); // ["abc", "Def", "BoC", "FED", 1, 2, 4, Array[2]] console.log(arr); // ["abc", "Def", "BoC", "FED"]
5、Array.slice()方法
Array.slice()方法返回指定數(shù)組的一個(gè)片段或子數(shù)組。它的兩個(gè)參數(shù)分別指定了片段的開始和結(jié)束的位置。返回的數(shù)組包含第一個(gè)參數(shù)指定的位置和所有到第二個(gè)參數(shù)指定的位置(但不含第二個(gè)參數(shù)指定的位置)之間的所有數(shù)組元素。如果只指定一個(gè)參數(shù),返回的數(shù)組將包含從開始位置到數(shù)組結(jié)尾的所有元素。如參數(shù)中出現(xiàn)負(fù)數(shù),它表示相對(duì)于數(shù)組中最后一個(gè)元素的位置。例如,參數(shù)-1指定了最后一個(gè)元素,而-3指定了倒數(shù)第三個(gè)元素。注意,此方法不會(huì)修改原始數(shù)組。
var arr = ['abc', 'Def', 'BoC', 'FED', 'slf']; console.log(arr.slice(1, 2)); // ["Def"] console.log(arr.slice(3)); // ["FED", 'slf'] console.log(arr.slice(0, -1)); // ['abc', 'Def', 'BoC', 'FED'] console.log(arr.slice(-3, -1)); // ['BoC', 'FED'] console.log(arr); // ['abc', 'Def', 'BoC', 'FED', 'slf']
6、Array.splice()方法
Array.splice()方法是在數(shù)組中插入或刪除元素的通用方法。注意,splice()和slice()擁有非常相似的名字,但它們的功能卻有本質(zhì)的區(qū)別。splice()能夠從數(shù)組中刪除元素、插入元素到數(shù)組中或者同時(shí)完成這兩種操作。在插入或刪除點(diǎn)之后的數(shù)組元素會(huì)根據(jù)需要增加或減小它們的索引值,因此數(shù)組的其他部分仍然保持連續(xù)的。splice()的第一個(gè)參數(shù)指定了插入和(或)刪除的起始位置。第二個(gè)參數(shù)指定了應(yīng)該從數(shù)組中刪除的元素的個(gè)數(shù)。如果省略第二個(gè)參數(shù),從起始點(diǎn)開始到數(shù)組結(jié)尾的所有元素都將被刪除。splice()返回一個(gè)由刪除元素組成的數(shù)組,或者如果沒(méi)有刪除元素就返回一個(gè)空數(shù)組。注意:此方法會(huì)改變?cè)紨?shù)組。(區(qū)別于concat(), splice()會(huì)插入數(shù)組本身而非數(shù)組的元素。)
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; console.log(arr.splice(7)); // [8, 9] console.log(arr); // [1, 2, 3, 4, 5, 6, 7] console.log(arr.splice(2, 4)); // [3, 4, 5] console.log(arr); // [1, 2, 7] console.log(arr.splice(2, 1, 3, 4, 5, 6)); // [7] console.log(arr); // [1, 2, 3, 4, 5, 6] console.log(arr.splice(3, 2, 3, [1, 2, 3])); // [4, 5] console.log(arr); // [1, 2, 3, [1, 2, 3], 6]
7、Array.push()和Array.pop()方法
push()和pop()方法允許將數(shù)組當(dāng)做棧來(lái)使用。push()方法在數(shù)組的尾部添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組新的長(zhǎng)度。pop()方法則相反:它刪除數(shù)組的最后一個(gè)元素,減小數(shù)組長(zhǎng)度并返回它刪除的值。注意:這兩個(gè)方法都會(huì)修改原始數(shù)組。
var arr = [1, 2, 3]; console.log(arr.push(7)); // 4 console.log(arr); // [1, 2, 3, 7] console.log(arr.push([2, 4])); // 5 console.log(arr); // [1, 2, 3, 7, [2, 4]] console.log(arr.pop()); // [2, 4] console.log(arr); // [1, 2, 3, 7]
8、Array.unshift()和Array.shift()方法
unshift()和shift()方法的行為非常類似于push()和pop()方法,不一樣的是:前者是在數(shù)組的頭部進(jìn)行元素的插入和刪除操作。unshift()在數(shù)組的頭部添加一個(gè)或多個(gè)元素,并將已存在的元素移動(dòng)到更高索引的位置來(lái)獲得足夠的空間,最后返回?cái)?shù)組新的長(zhǎng)度。shift()刪除數(shù)組的第一個(gè)元素并返回所刪除的元素,然后把所有隨后的元素向前移動(dòng)一個(gè)位置來(lái)填補(bǔ)數(shù)組頭部的空缺。注意:這兩個(gè)方法都會(huì)修改原始數(shù)組。
var arr = [6, 2, 3, 4, 5, 6]; console.log(arr.shift()); // 6 console.log(arr); // [2, 3, 4, 5, 6] console.log(arr.unshift(['a', 'b'])); // 6 console.log(arr); // [['a', 'b'], 2, 3, 4, 5, 6] console.log(arr.unshift('a', 'b')); // 8 console.log(arr); // ['a', 'b', ['a', 'b'] 2, 3, 4, 5, 6]
注意,當(dāng)使用多個(gè)參數(shù)調(diào)用unshift()時(shí),如果參數(shù)是一次性插入的而非一次一個(gè)地插入,這意味著最終的數(shù)組中插入的元素的順序和它們?cè)趨?shù)列表中的順序一致。而假如元素是一次一個(gè)地插入,它們的順序應(yīng)該是反過(guò)來(lái)的。
var arr = [6, 2, 3, 4, 5, 6]; console.log(arr.unshift('a', 'b', 'c')); // 9 console.log(arr); // ['a', 'b', 'c', 6, 2, 3, 4, 5, 6] console.log(arr.unshift(1)); // 10 console.log(arr); // [1, 'a', 'b', 'c', 6, 2, 3, 4, 5, 6] console.log(arr.unshift(2)); // 11 console.log(arr); // [2, 1, 'a', 'b', 'c', 6, 2, 3, 4, 5, 6]
9、Array.toString()和Array.toLocaleString()方法
數(shù)組和其他JavaScript對(duì)象一樣擁有toString()方法。針對(duì)數(shù)組,該方法將數(shù)組的每個(gè)元素都轉(zhuǎn)化為字符串并且輸出用逗號(hào)分隔的字符串列表。注意:此方法不會(huì)修改原始數(shù)組(這與不使用任何參數(shù)調(diào)用join()方法返回的字符串是一樣的)
var arr = [1, 2, 3]; console.log(arr.toString()); // 1,2,3 console.log(typeof(arr.toString())) // string console.log(arr); // [1, 2, 3]
擴(kuò)展:toLocaleString()是toString()方法的本地化版本。它調(diào)用元素的toLocaleString()方法將每個(gè)數(shù)組元素轉(zhuǎn)化為字符串,并且使用本地化分隔符將這些字符串連接起來(lái)生成最終的字符串。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
基于JavaScript實(shí)現(xiàn)瀑布流效果(循環(huán)漸近)
本文給大家介紹基于javascript實(shí)現(xiàn)循環(huán)漸近瀑布流效果,代碼簡(jiǎn)單易懂,非常具有參考價(jià)值,需要的朋友參考下吧2016-01-01js實(shí)現(xiàn)精確到秒的日期選擇器完整實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)精確到秒的日期選擇器,以完整實(shí)例形式分析了JavaScript日期選擇器的實(shí)現(xiàn)步驟與相關(guān)技巧,涉及JavaScript針對(duì)時(shí)間與日期的相關(guān)運(yùn)算,需要的朋友可以參考下2016-04-04javascript控制圖片播放的實(shí)現(xiàn)代碼
這篇文章主要介紹了javascript控制圖片播放的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08xmlplus組件設(shè)計(jì)系列之路由(ViewStack)(7)
xmlplus 是一個(gè)JavaScript框架,用于快速開發(fā)前后端項(xiàng)目。這篇文章主要介紹了xmlplus組件設(shè)計(jì)系列之路由,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05深入理解JavaScript中實(shí)例對(duì)象和new命令
典型的面向?qū)ο缶幊陶Z(yǔ)言(比如C++和 Java),都有“類”(class)這個(gè)概念。所謂“類”就是對(duì)象的模板,對(duì)象就是“類”的實(shí)例,下面這篇文章主要給大家介紹了關(guān)于JavaScript中實(shí)例對(duì)象和new命令的相關(guān)資料,需要的朋友可以參考下2022-12-12JavaScript隨機(jī)數(shù)的組合問(wèn)題案例分析
這篇文章主要介紹了JavaScript隨機(jī)數(shù)的組合問(wèn)題,結(jié)合具體案例形式分析了JavaScript隨機(jī)數(shù)的組合問(wèn)題相關(guān)算法原理、實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2020-05-05