摘要:創(chuàng)建數(shù)組判斷比是否是個(gè)數(shù)組取數(shù)組元素屬性返回?cái)?shù)組的成員數(shù)量。增加數(shù)組元素方法在數(shù)組的末尾增加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度。表示要移除的數(shù)組元素的個(gè)數(shù)要添加進(jìn)數(shù)組的元素最主要的的用途是向數(shù)組的中部插入元素。
數(shù)組的定義
數(shù)組是按序號(hào)排列的一組值,每個(gè)值的位置都有編號(hào)(從0開(kāi)始)。數(shù)組本質(zhì)上是一種特殊的對(duì)象。它的鍵名是按(0,1,2...)排列的一組數(shù)字。
創(chuàng)建數(shù)組:
var arr = new Array(values); var arr = [vaules];
判斷比是否是個(gè)數(shù)組
Array.isArray(arr)
arr instanceof Array
取數(shù)組元素
arr[index]
length 屬性
返回?cái)?shù)組的成員數(shù)量。
Javascript使用一個(gè)32位整數(shù),保存數(shù)組的元素個(gè)數(shù)。這意味著數(shù)組的成員最多只有4294967295個(gè)。
var arr = ["a","b"]; arr.length // 2 arr.[10] = "c" arr.length //11
從上面的輸出結(jié)果可以看出,length屬性可以動(dòng)態(tài)變化,如果將length屬性設(shè)為 0 ,就會(huì)將數(shù)組清空。如果設(shè)置的數(shù)小于原有的個(gè)數(shù),那么在這個(gè)數(shù)后面的數(shù)值就自動(dòng)刪除了。反過(guò)來(lái),如果設(shè)置的數(shù)大于原有的個(gè)數(shù),數(shù)組的成員將增大,都為 undefined。
var a = [1,2]; a.length = 5; a[4] // undefined a.length = 1; a.[1] // undefined a.length = 0; a //[]
增加數(shù)組元素
push()方法 在數(shù)組的末尾增加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度。
unshift()方法 在數(shù)組的開(kāi)頭增加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度。
length 屬性
var arr = [1, 2, 3] arr.push(4) arr // 1, 2, 3, 4 arr.unshift(6) arr // 6, 1, 2, 3, 4 arr[arr.length] = 7 // 與push()方法類似 arr // 6, 1, 2, 3, 4, 7
刪除數(shù)組中的元素
delete 運(yùn)算符,可以刪除數(shù)組中的某個(gè)元素,但這不會(huì)改變length屬性的值.
pop() 方法 刪除數(shù)組的最后一個(gè)元素,并返回這個(gè)元素。
shift() 方法 刪除數(shù)組的第一個(gè)元素,并返回這個(gè)元素。
var arr = [1,2,3]; delete arr[0]; arr // [undefined,2,3] arr.length // 3 var last = arr.pop() var first = arr.shift() last // 3 first // undefined arr //2類數(shù)組對(duì)象
在js中,有些對(duì)象被叫做“類數(shù)組對(duì)象”(array-like object),因?yàn)檫@些對(duì)象看起來(lái)很像數(shù)組,可以使用length屬性,但是無(wú)法使用數(shù)組的方法。
典型的類數(shù)組對(duì)象是函數(shù)的arguments對(duì)象,以及大多數(shù)DOM元素集,還有字符串。
// arguments對(duì)象 function args() {return arguments; } var arraylike = args("a","b") arrayLike[0] // "a" arrayLike.length // 2 arrayLike instanceof Array // false Array.isArray(arrayLike) // false // DOM元素集 var elts = document.getElementsByTagName("p"); elts.length // 3 eles instanceof Array // false //字符串 "abc"[1] // "b" "abc".length // 3 "abc" instanceof Array // false
數(shù)組的slice方法能將類數(shù)組對(duì)象,變成真正的數(shù)組。slice方法后面會(huì)結(jié)介紹。
var arr = Array.prototype.slice.call(arrayLike);數(shù)組的遍歷
for...in 循環(huán)
var a =[1, 2, 3]; a.other = "other"; for (var i in arr){ console.log( arr[i]); } // 1, 2, 3, other
從上面的輸出結(jié)果可以看出,利用for..in循環(huán)會(huì)將動(dòng)態(tài)添加的非數(shù)字鍵的值遍歷出來(lái),因此需要使用的時(shí)候需要注意。
for 循環(huán)和 while 循環(huán)
var a = [1, 2, 3]; // for循環(huán) for(var i = 0; i < a.length; i++) { console.log(a[i]); } // while循環(huán) var i = 0; while (i < a.length) { console.log(a[i]); i++; } var l = a.length; while (l--) { console.log(a[l]); }
forEach()方法
//array.forEach(callback[, thisArg]) //callback 在數(shù)組的每一項(xiàng)上執(zhí)行的函數(shù),接受三個(gè)參數(shù):item: 數(shù)組當(dāng)前項(xiàng)的值,index: 當(dāng)前項(xiàng)的索引,arr:數(shù)組本身。 var arr = [1, 2, 3] arr.forEach(function(item, index, arr){ console.log(item, index); }); //1 0 //2 1 //3 2數(shù)組常用的方法
join() 將數(shù)值轉(zhuǎn)換為字符串
var arr = [1, 2, 3]; arr.join(); // "1,2,3" arr.join("_"); // "1_2_3"
reverse() 將數(shù)組逆序
// 原數(shù)組會(huì)被修改 var arr = [1, 2, 3]; arr.reverse(); // [3, 2, 1] arr; // [3, 2, 1]
sort() 數(shù)組排序
默認(rèn)情況下是升序排列的,底層是調(diào)用了每個(gè)數(shù)組項(xiàng)的 toString() 方法,然后比較得到字符串,即使每個(gè)數(shù)組項(xiàng)的數(shù)值是數(shù)字,比較的也是字符串。
// 原數(shù)組會(huì)被修改 var arr = [1, 12, 213, 1432, "a"]; arr.sort(); // [1, 12, 1432, 213, "a"] arr.sort(function(a, b){ return b-a; //按倒序排列數(shù)組 });
concat() 數(shù)組合并
用法:array.concat(value1, value2, ..., valueN)
// 原數(shù)組不會(huì)被修改 var arr =[1, 2, 3] arr.concat(4, 5); arr; //[1, 2, 3] arr.concat([11,2],3); // [1, 2, 3, 11, 2, 3]
slice() 返回部分?jǐn)?shù)組
用法:array.slice(begin[,end])
slice用于復(fù)制數(shù)組,復(fù)制完后舊數(shù)組不變,返回得到的新數(shù)組是舊數(shù)組的子集。
第一個(gè)參數(shù)begin是開(kāi)始復(fù)制的位置,需要注意的是,可以設(shè)負(fù)數(shù)。設(shè)負(fù)數(shù)表示從尾往前數(shù)幾個(gè)位置開(kāi)始復(fù)制。例如slice(-2)將從倒數(shù)第2個(gè)元素開(kāi)始復(fù)制。另外需要注意的是,該參數(shù)雖未標(biāo)注為可選,但實(shí)際上是可以省略的,省略的話默認(rèn)為0。
第二個(gè)參數(shù)end可選,表示復(fù)制到該位置的前一個(gè)元素。例如slice(0,3)將得到前3個(gè)元素,但不包含第4個(gè)元素。不設(shè)的話默認(rèn)復(fù)制到數(shù)組尾,即等于array.length。
//原數(shù)組不會(huì)被修改 var arr = [1, 2, 3, 4, 5]; arr.slice(); //[1, 2, 3, 4, 5] arr.slice(1,3); // [2, 3] arr.slice(1, -1); // [2, 3, 4] arr; // [1, 2, 3, 4, 5]
splice() 數(shù)組拼接
用法:array.splice(start, deleteCount[, item1[, item2[, ...]]])
start 指要從哪一位開(kāi)始修改內(nèi)容,如果超出了數(shù)組的長(zhǎng)度,則從數(shù)組末尾開(kāi)始添加內(nèi)容;如果是負(fù)值,則表示從數(shù)組末位開(kāi)始的第幾位。
deleteCount 表示要移除的數(shù)組元素的個(gè)數(shù)
item 要添加進(jìn)數(shù)組的元素
最主要的的用途是向數(shù)組的中部插入元素。
//原數(shù)組會(huì)被修改 var arr = [1, 2, 3, 4, 5]; //從第三個(gè)數(shù)組元素刪除 arr.splice(2); // returns [3, 4, 5] arr; // [1, 2] //從第三個(gè)數(shù)組元素刪除,刪除兩個(gè)元素 arr.splice(2, 2) // returns [3, 4] arr; // [1, 2, 5] //將"a","b"替換到數(shù)組的第二個(gè)元素 arr.splice(1, 1, "a", "b")
forEach() 數(shù)組遍歷
用法:array.forEach(callback[, thisArg])
callback 在數(shù)組的每一項(xiàng)上執(zhí)行的函數(shù),接受三個(gè)參數(shù):item:數(shù)組當(dāng)前項(xiàng)的值,index: 當(dāng)前項(xiàng)的索引,arr:數(shù)組本身。
var arr = [1, 2, 3] arr.forEach(function(item, index, arr){ console.log(item, index); }); //1 0 //2 1 //3 2
map() 數(shù)組映射
map映射創(chuàng)建新數(shù)組,用法: map(function(value, index, array) { … }, [thisArg] );。和forEach一樣,不贅述。唯一需要注意的的是回調(diào)函數(shù)需要有return值,否則新數(shù)組都是undefined。
其實(shí)map能干的事forEach都能干,你可以把map理解為forEach的一個(gè)特例,專門用于:通過(guò)現(xiàn)有的數(shù)組建立新數(shù)組。
//原數(shù)組未被修改 var arr= [1, 2, 3]; arr.map(function(x){ return x+10; // 需要 return 值,否則新數(shù)組里都是 undefined }); // [11, 12, 13] arr; // [1, 2, 3]
filter() 數(shù)組過(guò)濾
filter用于過(guò)濾數(shù)組,用法: filter( function(value, index, array) { … }, [thisArg] ); 。唯一需要注意的的是回調(diào)函數(shù)需要return布爾值true或false,
//原數(shù)組未被修改 var arr= [1, 2, 3, 4, 5, 6, 7, 8]; arr.filter(function(x,index){ return x%2 == 0; }); // [2, 4, 6, 8] arr; // [1, 2, 3, 4, 5, 6, 7, 8]
every() some() 數(shù)組判斷
some表示只要某一個(gè)滿足條件就OK,every表示全部滿足條件才OK。
用法:
arr.every(callback[, thisArg])
arr.some(callback[,thisArg])
var arr= [1, 2, 3, 4, 5]; arr.every(function(x){ return x < 6; }); // true arr.every(function(x){ return x > 6; }); // false arr.some(function(x){ return x === 1; }); // true arr.some(function(x){ return x === 6; }); // false
reduce() reduceRight()
reduce() 方法接收一個(gè)函數(shù)作為累加器(accumulator),數(shù)組中的每個(gè)值(從左到右)開(kāi)始合并,最終為一個(gè)值。 兩者都是用于迭代運(yùn)算。區(qū)別是reduce從頭開(kāi)始迭代,reduceRight從尾開(kāi)始迭代。
用法: reduce( function(previousValue, currentValue, currentIndex, array) { … }, [initialValue] );
第一個(gè)參數(shù)是回調(diào)函數(shù),有4個(gè)參數(shù):previousValue,currentValue,currentIndex,array。看名字也能知道意思:前一個(gè)值,當(dāng)前值,當(dāng)前索引,數(shù)組本身。
第二個(gè)參數(shù)initialValue可選,表示初始值。如果省略,初始值為數(shù)組的第一個(gè)元素,這樣的話回調(diào)函數(shù)里previousValue就是第一個(gè)元素,currentValue是第二個(gè)元素。因此不設(shè)initialValue的話,會(huì)少一次迭代。
//將數(shù)組所有項(xiàng)相加 var arr = [0, 1, 2, 3]; var sum = arr.reduce(function(a, b) { return a + b }, 0); // 6 arr; //[0, 1, 2, 3] //數(shù)組扁平化 var flattened = [[0, 1], [2, 3], [4, 5]]; flattened.reduce(function(a,b){ return a.concat(b); }); // returns [0, 1, 2, 3, 4, 5]
indexOf() lastIndexOf() 數(shù)組檢索
用法:indexOf( searchElement, [fromIndex = 0]) / lastIndexOf( searchElement , [fromIndex = arr.length – 1])
第一個(gè)參數(shù)searchElement即需要查找的元素。第二個(gè)參數(shù)fromIndex可選,指定開(kāi)始查找的位置。如果忽略,indexOf默認(rèn)是0,lastIndexOf默認(rèn)是數(shù)組尾。
兩者都用于返回項(xiàng)目的索引值。區(qū)別是indexOf從頭開(kāi)始找,lastIndexOf從尾開(kāi)始找。如果查找失敗,無(wú)匹配,返回-1
var arr = ["a", "b", "c", "d", "e"]; arr.indexOf("c"); // 2 找到返回?cái)?shù)組下標(biāo) arr.indexOf("c", 3); // -1 指定從3號(hào)位開(kāi)始查找 arr.indexOf("f"); // -1 沒(méi)找到該元素 arr.lastIndexOf("c"); // 2 arr.lastIndexOf("c",2); // 2 arr.lastIndexOf("f"); // -1 沒(méi)找到該元素
isArray() 判斷是否是數(shù)組
用法:Array.isArray(value)
var arr = []; var a = "not array"; Array.isArray(arr); // true Array.isArray(a); // false參考資料
MDN
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87791.html
摘要:個(gè)人前端文章整理從最開(kāi)始萌生寫文章的想法,到著手開(kāi)始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開(kāi)始萌生寫文章的想法,到著手...
摘要:看下面一個(gè)例子優(yōu)點(diǎn)使用構(gòu)造器函數(shù)的好處在于,它可以在創(chuàng)建對(duì)象時(shí)接收一些參數(shù)。按照慣例,構(gòu)造函數(shù)的函數(shù)名應(yīng)始終以一個(gè)大寫字母開(kāi)頭,以區(qū)分普通函數(shù)。返回該對(duì)象的源代碼。使您有能力向?qū)ο筇砑訉傩院头椒ā? 基本概念 ECMA關(guān)于對(duì)象的定義是:無(wú)序?qū)傩缘募?,其屬性可以包含基本值、?duì)象或者函數(shù)。對(duì)象的每個(gè)屬性或方法都有一個(gè)名字,而每個(gè)名字都映射到一個(gè)值。 類 在現(xiàn)實(shí)生活中,相似的對(duì)象之間往往都有...
摘要:不會(huì)對(duì)空數(shù)組進(jìn)行遍歷遍歷數(shù)組的每一項(xiàng),數(shù)組當(dāng)前項(xiàng)的下標(biāo),原數(shù)組函數(shù)內(nèi)沒(méi)有執(zhí)行,證明數(shù)組為空是并不執(zhí)行遍歷返回一個(gè)新數(shù)組,長(zhǎng)度等于原數(shù)組長(zhǎng)度遍歷數(shù)組的每一項(xiàng),數(shù)組當(dāng)前項(xiàng)的下標(biāo),原數(shù)組即便函數(shù)返回空結(jié)果數(shù)組的 map() 不會(huì)對(duì)空數(shù)組進(jìn)行遍歷 let arr = [] let newArr = arr.map((item, i, arr) => { ...
摘要:使用一元加模擬函數(shù)原理對(duì)非數(shù)值類型的數(shù)據(jù)使用一元加,會(huì)起到與函數(shù)相同的效果。中,若判斷不為則不再進(jìn)行下一步操作。使用邏輯或設(shè)置默認(rèn)值邏輯或也屬于短路操作,即當(dāng)?shù)谝粋€(gè)操作數(shù)可以決定結(jié)果時(shí),不再對(duì)第二個(gè)操作數(shù)進(jìn)行求值。 善于利用JS中的小知識(shí)的利用,可以很簡(jiǎn)潔的編寫代碼 1. 使用!!模擬Boolean()函數(shù) 原理:邏輯非操作一個(gè)數(shù)據(jù)對(duì)象時(shí),會(huì)先將數(shù)據(jù)對(duì)象轉(zhuǎn)換為布爾值,然后取反,兩個(gè)!!...
摘要:很簡(jiǎn)單,不是數(shù)組,但是有屬性,且屬性值為非負(fù)類型即可。至于屬性的值,給出了一個(gè)上限值,其實(shí)是感謝同學(xué)指出,因?yàn)檫@是中能精確表示的最大數(shù)字。如何將函數(shù)的實(shí)際參數(shù)轉(zhuǎn)換成數(shù)組 這篇文章拖了有兩周,今天來(lái)跟大家聊聊 JavaScript 中一類特殊的對(duì)象 -> Array-Like Objects。 (本文節(jié)選自 underscore 源碼解讀系列文章,完整版請(qǐng)關(guān)注 https://githu...
閱讀 3721·2021-11-23 09:51
閱讀 1384·2021-11-10 14:35
閱讀 4023·2021-09-22 15:01
閱讀 1292·2021-08-19 11:12
閱讀 392·2019-08-30 15:53
閱讀 1702·2019-08-29 13:04
閱讀 3439·2019-08-29 12:52
閱讀 3069·2019-08-23 16:14