成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Javascript數(shù)組詳解

geekidentity / 2356人閱讀

摘要:創(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

相關(guān)文章

  • 【連載】前端個(gè)人文章整理-從基礎(chǔ)到入門

    摘要:個(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)始萌生寫文章的想法,到著手...

    madthumb 評(píng)論0 收藏0
  • 詳解js面向?qū)ο缶幊?/b>

    摘要:看下面一個(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ì)象之間往往都有...

    lolomaco 評(píng)論0 收藏0
  • javascript map()詳解

    摘要:不會(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) => { ...

    suxier 評(píng)論0 收藏0
  • 常用JavaScript小技巧及原理詳解

    摘要:使用一元加模擬函數(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è)!!...

    chnmagnus 評(píng)論0 收藏0
  • JavaScript 特殊對(duì)象 Array-Like Objects 詳解

    摘要:很簡(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...

    zhaofeihao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<