亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

JavaScript之數組(Array)詳解

2024-05-06 16:18:02
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了JavaScript之數組(Array)詳解,本文詳細講解了JavaScript數組的創建、檢測數組、轉化方法、棧方法、隊列方法、重排序方法、操作方法、位置方法等內容,需要的朋友可以參考下
 

ECMAScript的數組與其他語言中的數組有著相當大的區別。雖然ECMAScript中的數組也是有序列表,但是它數組你的每一項可以保存任何類型的數據。ECMAScript數組的大小是可以動態調整的。
    創建數組的基本方式有兩種。第一種是使用Array構造函數,如下所示:

復制代碼代碼如下:

var colors = new Array();

    如果知道數組要保存的項目數量,也可以給構造函數傳遞參數,而該參數會自動變成length屬性的值,如下:
復制代碼代碼如下:

var colors = new Array(20);

    也可以向Array構造函數中傳遞數組中應包含的項,如下代碼所示:
復制代碼代碼如下:

var colors = new Array("red","blue");

    另外,使用Array構造函數時也可以省略new操作符,如下所示:
復制代碼代碼如下:

var colors = Array(20);

    創建數組的第二種方式是使用數組字面量表示法。數組字面量由一對包含數組項的方括號表示,多個數組項之間用逗號隔開,如下所示:
復制代碼代碼如下:

var color = ["red","blue"];
var names = [];
var values = [1,2,]//IE8及之前3項,其他2項,不建議使用

    與對象一樣,在使用數字字面量表示法時,也不會調用Array的構造函數。
   在讀取和設置數組的值時,要使用方括號并提供相應值的基于0的數字索引,如下所示:
復制代碼代碼如下:

var colors = ["red","blue"]; //定義數組
alert(colors[0]); //red
colors[1] = "black" //修改第2項
colors[2] = "brown" //新增第3

    數組的項數保存在其length屬性中,這個屬性始終會返回0或更大的數字,如下所示:
復制代碼代碼如下:

var colors = ["red","blue"]; //定義數組
var names=[];
alert(colors.length);        //3
alert(names.length)          //0

    值得注意的是,數組的length值不是只讀的。因此,通過設置此值,可以從數組的末尾移出項或向數組添加項,如下:
復制代碼代碼如下:

var colors = ["red","blue"];
colors.length = 1;
alert(colors[1]); //undefined

    利用length屬性也可以方便的向數組末尾添加數據:
復制代碼代碼如下:

var colors = ["red","blue"];
colors[colors.length] = "black"; //在位置2新增
colors[colors.length] = "brown"; //在位置3新增

 

1、檢測數組

    對于一個網頁或一個全局作用域而言,使用instanceof操作符可以做到:

復制代碼代碼如下:

if(value instanceof Array){
  // 執行操作
}

    instanceof操作符局限性在于全局作用域,如果網頁包含多個框架,就存在兩個以上的全局執行環境。為了解決這個問題,ECMAScript5新增了Array.isArray()方法,使用如下:
復制代碼代碼如下:

if(Array.isArray(value)){
    // 執行操作
}

 

2、轉化方法
    調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串。而調用valueOf()返回還是數組。如下所示:

復制代碼代碼如下:

var colors = ['red', 'blue', 'green'];
alert(colors.toString()); //red,blue,green
alert(colors.valueOf()); //red,blue,green
alert(colors)            //red,blue,green

    數組繼承的toLocalString()、tiString()和valueOf()方法,在默認情況下都會以逗號分隔符的字符串形式返回數組項。而如果使用join()方法,則可以使用不同的分隔符來構建這個字符串。join()方法只接受一個參數,即用作分隔符的字符串,如下所示:
復制代碼代碼如下:

var colors = ['red', 'blue', 'green'];
alert(colors.join(',')); //red,blue,green
alert(colors.join('|')); //red|blue|green

    如果數組中的某一項值為null或者undefied,那么該值在join()、toLocalString()、tiString()和valueOf()方法返回結果以空字符串表示。

 

3、棧方法

Javascript專門為數組提供了push()和pop()操作,以便實現類似棧的行為。

push()方法可以接收任意數量的參數,把他們逐個添加到數組末尾,并返回修改后數組的長度。pop()方法則從數組末尾溢出最后一項,減少數組的length值,然后返回移出的項。

 

復制代碼代碼如下:

var colors = new Array(); //定義數組
var count = colors.push("red", "blue"); //壓入兩項
alert(count); //2
count = colors.push("black"); //壓入另一項
alert(count); //3
var item = colors.pop(); //彈出最后一項
alert(item); //"black"
alert(colors.length); //2

 

4、隊列方法

棧數據結構的訪問規則是LIFO(后進先出),而隊列的訪問規則是FIFO(先進先出)。隊列在列表末端添加項,在前端移出項。

shift()方法能夠移除數組中的第一項,并返回該項,數組的length-1。結合push()和shift()方法,可以像使用隊列一樣使用數組,如下所示:

復制代碼代碼如下:

var colors = new Array();
var count = colors.push("red", "blue");
count = colors.push("black");
alert(count);
var item = colors.shift(); //取得第一項
alert(item); //"red"
alert(color.length); //2

 

 ECMAScript還為數組提供了unshift()方法。unshift()和shift()方法用途相反:它在數組前端添加任意個項并返回新數組的長度。因此,同時使用unshift()和shift()方法,可以從相反方向來模擬隊列,即在數組前端添加新項,從數組末端移出項,如下所示:
 

復制代碼代碼如下:

 var colors = new Array();
var count = colors.push("red", "green");
alert(count); //2
count = colors.unshift("black"); //推入另一項
alert(count); //3
var item = colors.pop(); //取得最后一項
alert(item) //green
alert(colors.length) //2
 

 

 5、重排序方法
    數組中已經存在兩個可以直接用來重排序的方法:reverse()和sort()。reverse()方法會按照反轉數組項的排序。 

復制代碼代碼如下:

var values = [2, 1, 3, 4, 5];
values.reverse();
alert(values); //5,4,3,2,1

    默認情況下,sort()方法按照升序排列數組項,調用每一項的toString()方法,比較字符串,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的都是字符串。
 
復制代碼代碼如下:

var values = [12, 11, 3, 4, 5];
values.sort();
alert(values); //12,11,3,4,5

    我們可以通過一個比較函數當作參數傳遞給sort()方法。如下:
復制代碼代碼如下:

function compare(value1, value2) {
    if (value1 < value2) {
        return -1
    } else if (value1 > value2) {
        return 1
    } else {
        return 0
    }
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values);    //0,1,5,10,15 

 

6、操作方法
    ECMAScript為操作在數組中提供了很多方法。其中,concat()方法可以基于當前數組中的所有項創建一個新數組。

復制代碼代碼如下:

var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown

    slice()方法,它能夠基于當前數組的一個項或多個項創建新數組,它可以接收一個或兩個參數,即要返回項的起始和結束位置。一個參數時,返回該參數指定位置開始到當前數組末尾的所有項。兩個參數則返回起始到指定位置的所有項——不包括結束位置的項。注意,slipe()方法不影響原始數組。
復制代碼代碼如下:

var colors=["red","green","blue","black","brown"];
var colors2=colors.slice(1);
var colors3=colors.slice(1,4);
alert(colors2); //green,blue,black,brown
alert(colors3); //green,blue,black

    slice()方法刪除:可以刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置和要刪除的項數。
    slice()方法插入:可以向指定位置插入任意數量的項,只需提供3個參數:起始位置、0(要刪除的項數)和要插入的項。
    slipe()方法替換:可以項指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定3個參數:起始位置、要刪除的項數和要插入的任意數量的項。
復制代碼代碼如下:

var colors = ["red", "green", "blue"];
//刪除
var removed = colors.slice(0, 1); //刪除第1項
var colors3 = colors.slice(1, 4);
alert(colors); //green,blue
alert(removed); //red
//插入
removed = colors.slice(1, 0,"yellow","orange"); //從位置1開始插入
alert(colors); //green,yellow,orange,blue
alert(removed); //空數組
//替換
removed = colors.slice(1, 1,"red","purple"); //從位置1開始插入
alert(colors); //green,"red","purple",orange,blue
alert(removed); //"yellow"

 

7、位置方法
    ECMAScript5為數組提供了兩個位置方法:indexOf()和lastIndexOf()。這兩個方法都接收兩個參數:要查找的項和表示查找起點位置的索引(可選)。其中indexOf()方法從數組的開頭開始先后查找,lastIndexOf()方法則從數組的末尾開始向前查找。
    這兩個方法都返回要查找的項在數組中的位置,在沒有找到的情況下返回-1。

復制代碼代碼如下:

var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
alert(numbers.indexOf(4)) //3
alert(numbers.lastIndexOf(4)) //5
alert(numbers.indexOf(4, 4)) //5
alert(numbers.lastIndexOf(4, 4)) //3

8、迭代方法

 

ECMAScript5為數組定義了5個迭代方法。每個方法都接受兩個參數,第一個是進行迭代的函數,第二個是該函數的作用域對象【可選】。

進行迭代的函數接受三個參數,第一個是數組中要進行迭代的元素的值,第二個是數組候總要進行迭代的元素的位置,第三個是迭代數組本身。

    1. every()      對數組中的每一項運行給定的函數,如果該函數對每一項都返回true,則返回true     
 2. filter()       對數組中的每一項運行給定的函數,返回該函數返回true的項組成的數組。     
 3. forEach()  對數組中的每一項運行給定的函數,這個方法沒有返回值    4. map()       對數組中的每一項運行給定的函數,返回每次函數調用的結果組成的數組 
    5. some()     對數組中的每一項運行給定的函數,如果該函數對任意一項返回true,則返回true 
    這些迭代方法支持的瀏覽器有,IE9+,Firefox2+,Safari3+,Opera 9.5+,chrome 
    在這些方法中,最相似的是every()和some(),它們都是用于查詢數組中的項是否滿足某個條件。對every()來說,傳入的函數必須對每一項都返回true,這個方法才返回true;否則,他就返回false。而some()方法則是只要傳入的函數對數組中某一項返回true,就返回true。

 

復制代碼代碼如下:

var num = [1,2,3,4,5,6,7,8,9];
var everyResult = num.every(function(item, index, array) {
    if(item > 2) {
        return true;
    }
});
alert(everyResult); //false
var someResult = num.some(function(item) {
    if(item > 2) {
        return true;
    }
});
alert(someResult); //true

 

    filter()是利用指定的函數確定是否在返回的數組中包含某一項。

 

復制代碼代碼如下:

var num = [1,2,3,4,5,4,3,2,1];
var filterResult = num.filter(function(item) {
    if(item > 2) {
        return true;
    }
});
alert(filterResult);  //[3,4,5,4,3]

 

  map()也返回一個數組,而這個數組的每一項都是在原始數組中的對應項上運行傳入函數的結果。
 

復制代碼代碼如下:

  var num = [1,2,3,4,5,4,3,2,1];
var mapResult = num.map(function(item) {
    if(item > 2) {
        return true;
    }
}); //[2,3,6,8,10,8,6,4,2]
 

 

   forEach()是對數組中的每一項運行傳入的函數。這個方法沒有返回值,本質上與使用for循環迭代數組一樣。

復制代碼代碼如下:

var num = [1,2,3,4,5,4,3,2,1];
num.forEach(function(item) {
  // 執行操作
});

 

9、歸并方法

ECMAScript5中新增了兩個方法:reduceRight() 和 reduce()。這兩個方法都接受兩個參數:第一個是用來迭代的數組的函數,這個函數有四個參數分別是,前一個值,當前值,項的索引,數組對象。然而這個函數的任何值都會作為第一個參數自動傳給下一項。第二個是作為第一個函數中第一個參數的初始值 。

復制代碼代碼如下:

var nums = [1,2,3,4,5];
var sum = nums.reduce(function(prev, cur, index, array) {
    return prev + cur;
});
alert(sum);//15
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国产精品www| 国产日韩欧美中文| 国模精品视频一区二区三区| 最近2019中文字幕第三页视频| 欧美激情图片区| 久久精品国产96久久久香蕉| 亚洲国产精品专区久久| 18一19gay欧美视频网站| 日韩成人av一区| 午夜免费久久久久| 日韩av不卡电影| 久久综合久久八八| 宅男66日本亚洲欧美视频| 国产精品一区二区3区| 国产精品久久久久久久久久东京| 国产精选久久久久久| 欧美人与性动交a欧美精品| 91免费人成网站在线观看18| 欧美亚洲国产视频| 大桥未久av一区二区三区| 欧美日韩免费看| 日韩二区三区在线| 久久天天躁夜夜躁狠狠躁2022| 亚洲美女免费精品视频在线观看| 亚洲精品狠狠操| 国产精欧美一区二区三区| 亚洲精品少妇网址| 亚洲激情视频网站| 亚洲丁香婷深爱综合| 黄色一区二区在线| 日韩av电影中文字幕| 亚洲欧美日韩在线一区| 日韩天堂在线视频| 国产精品扒开腿做爽爽爽视频| 亚洲bt天天射| 日韩欧美国产高清91| 国产欧美一区二区三区久久人妖| 亚洲成人久久电影| 亚洲精品国产成人| 日本精品久久电影| 26uuu亚洲国产精品| 色777狠狠综合秋免鲁丝| 91精品国产91久久久久久吃药| 91爱视频在线| 日韩中文字幕免费看| 欧美一区二区三区四区在线| 亚洲精品98久久久久久中文字幕| 日本精品va在线观看| 国产日韩在线精品av| 国产精品久久久久久网站| 亚洲美女又黄又爽在线观看| 亚洲精品suv精品一区二区| 亚洲免费精彩视频| 久久精品视频一| 欧美日韩加勒比精品一区| 精品偷拍一区二区三区在线看| 亚洲精品久久久一区二区三区| 亚洲国产精品一区二区三区| www.午夜精品| 国产精品极品尤物在线观看| 精品国产依人香蕉在线精品| 国产91|九色| 国产热re99久久6国产精品| 亚洲精品久久久一区二区三区| 欧美极品在线视频| 在线视频日本亚洲性| 国产精品欧美风情| 欧美—级高清免费播放| 国产精品普通话| 久久久在线视频| 欧美在线视频免费观看| 久久久这里只有精品视频| 欧美高跟鞋交xxxxhd| 亚洲欧洲一区二区三区久久| xxxxx成人.com| 欧美成人四级hd版| 欧美性极品xxxx做受| 国内免费久久久久久久久久久| 久99九色视频在线观看| 亚洲欧美日韩图片| 亚洲精品欧美日韩| 欧美激情小视频| 久久精品夜夜夜夜夜久久| 久久久电影免费观看完整版| 亚洲影视中文字幕| 大荫蒂欧美视频另类xxxx| 久久精品国产亚洲精品2020| 中日韩美女免费视频网址在线观看| 国产精品日韩在线观看| 亚州欧美日韩中文视频| 日韩免费视频在线观看| 91亚洲精品在线观看| 精品中文字幕在线2019| 国产成人在线亚洲欧美| 亚洲毛茸茸少妇高潮呻吟| 欧美成人免费网| 国产欧美欧洲在线观看| 国产成人拍精品视频午夜网站| 亚洲女人天堂成人av在线| 国产一区二区三区毛片| 成人午夜激情免费视频| 成人国产精品av| 久久国产精品网站| 欧美日韩免费在线观看| 亚洲性日韩精品一区二区| 国产一区二区香蕉| 久久99久国产精品黄毛片入口| 欧美日韩国产一区在线| 91大神在线播放精品| 欧美日韩亚洲一区二区| 茄子视频成人在线| 91sao在线观看国产| 亚洲免费高清视频| 日韩欧美国产黄色| 欧美激情亚洲综合一区| 欧美另类暴力丝袜| 国产精品69av| 国产精品香蕉国产| 啪一啪鲁一鲁2019在线视频| 亚洲精品成人av| 91极品女神在线| 国产精品高潮呻吟久久av无限| 国自产精品手机在线观看视频| 日韩精品在线视频观看| 国产精品久久久久久久久久东京| 国产日韩欧美中文| 精品国产91乱高清在线观看| 亚洲欧美成人网| 精品国产91久久久久久老师| 国产精品视频播放| 国产精品av在线播放| 国产噜噜噜噜噜久久久久久久久| 国产精品99久久久久久白浆小说| 亚洲福利视频专区| 国产一区二区三区在线看| 欧美性高潮床叫视频| 青青草国产精品一区二区| 国产精品自产拍在线观| 亚洲综合精品一区二区| 欧美日韩亚洲天堂| 成人免费观看a| 欧美诱惑福利视频| 亚洲欧美日韩精品久久奇米色影视| 国产午夜精品美女视频明星a级| 曰本色欧美视频在线| 久久影视电视剧免费网站清宫辞电视| 欧美性猛交xxxx黑人| 18久久久久久| 国产精品免费看久久久香蕉| 精品国产91乱高清在线观看| 亚洲精品综合精品自拍| 亚洲最大在线视频| 国语自产精品视频在线看抢先版图片| 国产成人久久久精品一区| 在线日韩av观看| 国产精品一区二区性色av| 国产亚洲精品美女久久久久| 亚洲免费中文字幕| 在线精品国产成人综合| 亚洲欧美在线第一页| 国产乱肥老妇国产一区二| 日韩av毛片网| 亚洲精品之草原avav久久| 欧美巨乳美女视频|