摘要:創(chuàng)建數(shù)組數(shù)組字面量數(shù)組構(gòu)造函數(shù)參數(shù)為數(shù)組建議使用數(shù)組字面量方式,性能好,代碼少,簡(jiǎn)潔,畢竟代碼少。數(shù)組判斷方法用來判斷某個(gè)值是否為。的這是最簡(jiǎn)潔最直接的遍歷數(shù)組元素的語法。把數(shù)組轉(zhuǎn)換為本地?cái)?shù)組,并返回結(jié)果。
前端學(xué)習(xí):前端教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總
歡迎提issues斧正:數(shù)組&數(shù)組方法使用詳解
Array對(duì)象之前一直在溫故js系列,希望能夠知新,不過最近應(yīng)業(yè)務(wù)要求,在做移動(dòng)WEB,需求大,任務(wù)多。所以,只有像現(xiàn)在閑著的時(shí)候才能繼續(xù)溫故js了。祖國(guó)母親的生日,祝祖國(guó)繁榮昌盛O(∩_∩)O~ 不知道有多少程序猿宅在家里,多少程序猿堵在路上...
在 JavaScript 中 Array 是一個(gè)用來構(gòu)造數(shù)組的全局對(duì)象,它是一個(gè)高階的類似有序列表的對(duì)象,是JavaScript內(nèi)置對(duì)象里非常重要的一個(gè)。
創(chuàng)建數(shù)組:
數(shù)組字面量var arr = []; var arr = [1, 2, 3]; var arr = [[1],2,[2,[123]]];數(shù)組構(gòu)造函數(shù)
var arr = new Array(); //[] var arr = new Array(1,2,3); //[1, 2, 3] var arr = new Array(3); //[undefined,undefined,undefined] 參數(shù)3為數(shù)組length var arr = new Array([1],2,[2,[123]]); //[[1],2,[2,[123]]]
建議使用數(shù)組字面量方式,性能好,代碼少,簡(jiǎn)潔,畢竟代碼少。
Array屬性 length屬性length屬性返回?cái)?shù)組的長(zhǎng)度,是一個(gè)可變屬性,表示一個(gè)數(shù)組中的元素個(gè)數(shù)。
數(shù)組的索引由0開始,所以一個(gè)數(shù)組的最前和最后的值為限分別是:arr[0]和arr[arr.length-1]
var arr = [1,2,3]; arr.length // 3 arr.length = 2; //改變數(shù)組length,從后往前截取 arr // [1,2],此時(shí)arr.length為2。所以平時(shí)我們可以用length來操作數(shù)組(刪除,添加) arr.length = 4; arr // // [1,2,undefined,undefined],此時(shí)arr.length為2,后面填充undefinedprototype屬性
prototype屬性返回對(duì)象類型原型的引用,所有的數(shù)組實(shí)例都繼承了這個(gè)屬性,所有的數(shù)組方法都定義在 Array.prototype 身上。一般來說,我們經(jīng)常用prototype屬性來擴(kuò)展數(shù)組方法:
//給數(shù)組添加個(gè)方法,返回?cái)?shù)組中的最大值 Array.prototype.max = function() { return Math.max.apply(null,this); } [1,2,3,4].max(); //4 //給數(shù)組添加個(gè)方法,給數(shù)組去重 Array.prototype.unique = function() { return this.filter((item, index, arr) => arr.indexOf(item) === index); } [11,2,1,1,2,3,1,2,4,5,23,2].unique(); //[11, 2, 1, 3, 4, 5, 23]
數(shù)組去重:數(shù)組去重演化
constructor屬性constructor屬性返回創(chuàng)建對(duì)象的函數(shù),即構(gòu)造函數(shù)。如下:
var arr = [1,2,3]; arr.constructor //function Array() { [native code] } arr.constructor === Array //true 即 new Array var a = new Array(); a.constructor === Array //true
對(duì)于數(shù)組來說,這個(gè)屬性還是罕見使用的。
數(shù)組判斷 Array.isArray()Array.isArray() 方法用來判斷某個(gè)值是否為Array。如果是,則返回 true,否則返回 false
Array.isArray([]); //true Array.isArray([1,2,3]); //true Array.isArray(new Array()); //true Array.isArray(); //false Array.isArray({}); //false Array.isArray(123); //false Array.isArray("xzavier"); //false利用屬性自己寫方法
Array.isArray()在ES5之前不支持,就自己寫。不過現(xiàn)在都到ES6了,可以不管了。
Array.prototype.isArray = Array.prototype.isArray || function() { return Object.prototype.toString.call(this) === "[object Array]"; } [1,2,3].isArray(); //true數(shù)組遍歷
關(guān)于這幾個(gè)遍歷語句的詳細(xì)講解可參考:溫故js系列(8)-流程控制
經(jīng)典的forfor (var index = 0; index < arr.length; index++) { console.log(arr[index]); }
這種寫法很經(jīng)典,就是語句多,但是性能好。
ES5的forEacharr.forEach(function (value) { console.log(value); });
這種寫法簡(jiǎn)潔,但這種方法也有一個(gè)小缺陷:你不能使用break語句中斷循環(huán),也不能使用return語句返回到外層函數(shù)。
不建議的for-infor (var i in arr) { console.log(arr[i]); }
for-in是為普通對(duì)象設(shè)計(jì)的,你可以遍歷得到字符串類型的鍵,因此不適用于數(shù)組遍歷。但是它能遍歷數(shù)組,作用于數(shù)組的for-in循環(huán)體除了遍歷數(shù)組元素外,還會(huì)遍歷自定義屬性。舉個(gè)例子,如果你的數(shù)組中有一個(gè)可枚舉屬性arr.name,循環(huán)將額外執(zhí)行一次,遍歷到名為“name”的索引。就連數(shù)組原型鏈上的屬性都能被訪問到。所以,不建議使用。
ES6的for-offor (var value of arr) { console.log(value); // 1 2 3 }
這是最簡(jiǎn)潔、最直接的遍歷數(shù)組元素的語法。這個(gè)方法避開了for-in循環(huán)的所有缺陷。與forEach()不同的是,它可以正確響應(yīng)break、continue和return語句。
for (var value of arr) { if(value == 2){break;} console.log(value); //1 }數(shù)組方法細(xì)說 splice插入、刪除、替換
splice() 方法可以插入、刪除或替換數(shù)組的元素,注意:同時(shí)改變了原數(shù)組。
1.刪除-刪除元素,傳兩個(gè)參數(shù),要?jiǎng)h除第一項(xiàng)的位置和第二個(gè)要?jiǎng)h除的項(xiàng)數(shù)
2.插入-向數(shù)組指定位置插入任意項(xiàng)元素。三個(gè)參數(shù),第一個(gè)參數(shù)(位置),第二個(gè)參數(shù)(0),第三個(gè)參數(shù)(插入的項(xiàng))
3.替換-向數(shù)組指定位置插入任意項(xiàng)元素,同時(shí)刪除任意數(shù)量的項(xiàng),三個(gè)參數(shù)。第一個(gè)參數(shù)(起始位置),第二個(gè)參數(shù)(刪除的項(xiàng)數(shù)),第三個(gè)參數(shù)(插入任意數(shù)量的項(xiàng))
var arr = ["q","w","e"]; //刪除 var removed = arr.splice(1,1); console.log(arr); //q,e 已被改變 console.log(removed); //w ,返回刪除的項(xiàng) //插入 var insert = arr.splice(0,0,"r"); //從第0個(gè)位置開始插入 console.log(insert); //返回空數(shù)組 console.log(arr); //r,q,e //替換 var replace = arr.splice(1,1,"t"); //刪除一項(xiàng),插入一項(xiàng) console.log(arr); //r,t,e console.log(replace); //q,返回刪除的項(xiàng)sort 排序
sort() 方法對(duì)數(shù)組的元素做原地的排序,并返回這個(gè)數(shù)組。
var arr = [1,2,4,3,1,1,2]; console.log(arr.sort());//[1, 1, 1, 2, 2, 3, 4] 然而: var arr = [1,2,10,4,3,1,1,2]; console.log(arr.sort());//[1, 1, 1, 10, 2, 2, 3, 4]
這是因?yàn)?b>sort排序可能是不穩(wěn)定的,默認(rèn)按照字符串的Unicode碼位點(diǎn)排序。
但是,sort()方法接受一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)函數(shù),可選,用來指定按某種順序進(jìn)行排列的函數(shù)。如果省略,元素按照轉(zhuǎn)換為的字符串的諸個(gè)字符的Unicode位點(diǎn)進(jìn)行排序。
var arr = [1,2,10,4,3,1,1,2]; console.log(arr.sort(function(a,b){ return a-b; })); // [1, 1, 1, 2, 2, 3, 4, 10]
這個(gè)函數(shù)就是我們自己控制了,我們想要什么樣的排序就改變這個(gè)參數(shù)函數(shù)的邏輯即可。
slice截取、轉(zhuǎn)化arguments偽數(shù)組slice()方法可從已有的數(shù)組中返回選定的元素?cái)?shù)組。不會(huì)修改原數(shù)組,只會(huì)會(huì)淺復(fù)制數(shù)組的一部分到一個(gè)新的數(shù)組,并返回這個(gè)新數(shù)組。
語法:arrayObject.slice(start,end) 參數(shù)可為正負(fù)。
start 必需。規(guī)定從何處開始選取。如果是負(fù)數(shù),那么它規(guī)定從數(shù)組尾部開始算起的位置。也就是說,-1 指最后一個(gè)元素,-2 指倒數(shù)第二個(gè)元素,以此類推。 end 可選。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒有指定該參數(shù),那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。 如果這個(gè)參數(shù)是負(fù)數(shù),那么它規(guī)定的是從數(shù)組尾部開始算起的元素。 var arr = [1,2,3,4,5]; arr.slice(0,3); // [1,2,3] arr.slice(3); // [4,5] arr.slice(1,-1); // [2,3,4] arr.slice(-3,-2); // [3] var arr1 = arr.slice(0); //返回?cái)?shù)組的拷貝數(shù)組,是一個(gè)新的數(shù)組,不是賦值指向
slice方法經(jīng)常用來截取一個(gè)數(shù)組,不過它更常用在將偽數(shù)組轉(zhuǎn)化為真數(shù)組。平時(shí)我們的函數(shù)傳的參數(shù)arguments是一個(gè)偽數(shù)組,很多數(shù)組的方法不能使用,我們就需要將偽數(shù)組轉(zhuǎn)化為真數(shù)組。
function test() { var arr = arguments; arr.push("xza"); console.log(JSON.stringify(arr)); } test(1,2,3); //arr.push is not a function(…) 因?yàn)閭螖?shù)組沒有push方法 轉(zhuǎn)換后: function test() { var arr = Array.prototype.slice.call(arguments); arr.push("xza"); console.log(JSON.stringify(arr)); } test(1,2,3); //[1,2,3,"xza"]filter 過濾
filter() 方法使用指定的函數(shù)測(cè)試所有元素,并創(chuàng)建一個(gè)包含所有通過測(cè)試的元素的新數(shù)組。簡(jiǎn)單來說就是對(duì)數(shù)組進(jìn)行過濾,返回一個(gè)過濾過的數(shù)組。
語法:array.filter(function(currentValue,index,arr), thisValue)
function(currentValue, index,arr) 必須。函數(shù),數(shù)組中的每個(gè)元素都會(huì)執(zhí)行這個(gè)函數(shù) 函數(shù)的三個(gè)參數(shù):currentValue必須,當(dāng)前元素的值; index可選,當(dāng)期元素的索引值; arr可選,當(dāng)期元素屬于的數(shù)組對(duì)象 thisValue 可選。對(duì)象作為該執(zhí)行回調(diào)時(shí)使用,傳遞給函數(shù),用作 "this" 的值。如果省略了 thisValue ,"this" 的值為 "undefined" //用filter給數(shù)組添加個(gè)方法,給數(shù)組去重 Array.prototype.unique = function() { return this.filter((item, index, arr) => arr.indexOf(item) === index); } [11,2,1,1,2,3,1,2,4,5,23,2].unique(); //[11, 2, 1, 3, 4, 5, 23]
filter() 不會(huì)對(duì)空數(shù)組進(jìn)行檢測(cè),不會(huì)改變?cè)紨?shù)組。
concat 連接數(shù)組var arr1 = [1,2,3]; var arr2 = [4,5,6]; var arr3 = arr1.concat(arr2); //[1, 2, 3, 4, 5, 6] arr3.concat(7); //[1, 2, 3, 4, 5, 6, 7]
我們平時(shí)都是這么使用的,如果需要連接兩個(gè)數(shù)組的元素時(shí),中間插元素,可以
var arr3 = arr1.concat("xzavier", arr2); //[1, 2, 3, "xzavier", 4, 5, 6]
不加參數(shù)相當(dāng)于拷貝,返回?cái)?shù)組的拷貝數(shù)組,是一個(gè)新的數(shù)組,并不是指向原來數(shù)組。
var arr4 = arr1.concat(); //[1,2,3] var arr5 = arr1; arr4 === arr1; //false arr5 === arr1; //true插入刪除
前面講了個(gè)splice可以在數(shù)組的任何位置插入刪除元素,這兒講的是只能在首尾插入刪除的方法,用起來也很方便。
在數(shù)組尾插入刪除:
push()方法可以接收任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組的末尾,并返回修改后數(shù)組的長(zhǎng)度。 pop()方法則從數(shù)組末尾移除最后一個(gè)元素,減少數(shù)組的length值,然后返回移除的元素。 var arr = [1,2,3]; arr.push(4); // 返回的length 4 arr.pop(); //返回的刪除值 4 arr //[1, 2, 3]
在數(shù)組頭插入刪除:
unshift()方法為數(shù)組的前端添加一個(gè)元素 shift()方法從數(shù)組前端移除一個(gè)元素 var arr = [1,2,3]; arr.unshift(4); // 返回的length 4 arr.shift(); //返回的刪除值 4 arr //[1, 2, 3]其他方法
方法 使用 concat() 連接兩個(gè)或更多的數(shù)組,并返回結(jié)果。 join() 把數(shù)組的所有元素放入一個(gè)字符串。元素通過指定的分隔符進(jìn)行分隔。 reverse() 顛倒數(shù)組中元素的順序。 toString() 把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果。 toLocaleString() 把數(shù)組轉(zhuǎn)換為本地?cái)?shù)組,并返回結(jié)果。 valueOf() 返回?cái)?shù)組對(duì)象的原始值 map() 返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。 every() 測(cè)試數(shù)組的所有元素是否都通過了指定函數(shù)的測(cè)試。 some() 測(cè)試數(shù)組中的某些元素是否通過了指定函數(shù)的測(cè)試。
小試:(歡迎補(bǔ)充和斧正問題,更多方法延伸閱讀:ES6數(shù)組的擴(kuò)展)
ar arr = ["xzavier",123,"jser"]; console.log(arr.valueOf()); //["xzavier",123,"jser"] console.log(arr.toString()); //xzavier,123,jser console.log(arr.toLocaleString()); //xzavier,123,jser var arr = ["xzavier",123,"jser"]; console.log(arr.join(",")); //xzavier,123,jser var arr = [1,2,3]; console.log(arr.reverse()); //[3,2,1] var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); //[1,2,3] numbers //[1,4,9] roots // [1,2,3] [2, 5, 1, 4, 3].some(function (element, index, array) { return (element >= 10); }); //false [2, 5, 1, 4, 13].some(function (element, index, array) { return (element >= 10); }); //true [2, 5, 1, 4, 13].every(function (element, index, array) { return (element >= 10); }); //false [2, 5, 1, 4, 13].every(function (element, index, array) { return (element >= 0); }); //true趣味探索
[1,2] + [3,4] == "1,23,4"; //true ++[[]][+[]]+[+[]] == "10"; //true console.log ([] == ![]); //true
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80565.html
摘要:數(shù)字和解釋因?yàn)闆]有任何一個(gè)操作數(shù)是字符串,將轉(zhuǎn)換為一個(gè)數(shù)字做數(shù)字加法運(yùn)算因?yàn)闆]有操作數(shù)是對(duì)象或字符串,將轉(zhuǎn)換為。結(jié)論以避免潛在的問題,不使用加法運(yùn)算符處理對(duì)象,除非你清楚地使用或方法。 前端學(xué)習(xí):教程&模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試資源匯總 JavaScript一路走來,備受爭(zhēng)議,與其說它備受爭(zhēng)議,不如說它不夠完美。不夠完美?那完美了還得了,它的...
摘要:對(duì)象創(chuàng)建字面量方式構(gòu)造函數(shù)方式也可以這樣不過這樣的話,為何不選擇字面量方式字面量方式和方式的寫法是等價(jià)的,返回的結(jié)果是同種類的對(duì)象。構(gòu)造函數(shù)產(chǎn)生實(shí)例時(shí),實(shí)例通過其對(duì)應(yīng)原型對(duì)象的訪問對(duì)應(yīng)的構(gòu)造函數(shù)對(duì)象。 前端學(xué)習(xí):教程&模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試資源匯總 歡迎提issues斧正:對(duì)象&對(duì)象使用 Object對(duì)象 在 JavaScript 中,對(duì)...
摘要:的對(duì)象表示正則表達(dá)式,而和都定義了使用正則表達(dá)式進(jìn)行強(qiáng)大的模式匹配和文本檢索與替換的函數(shù)。對(duì)象也提供了個(gè)使用正則表達(dá)式的方法。如正則表達(dá)式將匹配除了和所有大寫字母之外的任何字符。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:正則表達(dá)式 JavaScript-正則表達(dá)式 正則表達(dá)式簡(jiǎn)述 正則表達(dá)式(re...
摘要:引用數(shù)據(jù)類型引用數(shù)據(jù)類型值指保存在堆內(nèi)存中的對(duì)象。訪問方式是按引用訪問。數(shù)據(jù)類型檢測(cè)操作符是檢測(cè)基本類型的最佳工具。未定義布爾值字符串?dāng)?shù)值對(duì)象或函數(shù)用于檢測(cè)引用類型,可以檢測(cè)到它是什么類型的實(shí)例。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:數(shù)據(jù)類型 回味,無窮! 數(shù)據(jù)類型定義 數(shù)據(jù)類型分類 基本數(shù)據(jù)...
摘要:業(yè)務(wù)越復(fù)雜,邏輯就越復(fù)雜,判斷就越多比較判斷比較判斷是比較兩個(gè)值,返回一個(gè)布爾值,表示是否滿足比較條件。對(duì)于非布爾值的數(shù)據(jù),取反運(yùn)算符會(huì)自動(dòng)將其轉(zhuǎn)為布爾值。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:========== JavaScript-判斷 代碼中,多多少少會(huì)有判斷語句。業(yè)務(wù)越復(fù)雜,邏輯就越...
閱讀 2695·2021-11-18 10:02
閱讀 2689·2021-11-15 11:38
閱讀 3798·2021-11-12 10:36
閱讀 768·2021-11-12 10:34
閱讀 3000·2021-10-21 09:38
閱讀 1601·2021-09-29 09:48
閱讀 1708·2021-09-29 09:34
閱讀 1187·2021-09-22 10:02