JS引用類型 -- Array類型

ECMAScript數組與其他語言中的數組都是數據的有序列表,但與其他語言不同的是,ECMAScript數組的每一項可以保存任何類型的數據。而且ECMAScript數組的大小是可以動態調整的,即可以隨著數據的添加自動增長。

創建數組的基本方式有兩種:

第一種是使用Array構造函數:

//1. 使用Array構造函數
var colors = new Array();//2.如果預先知道數組要保存的項目數量,也可以給構造函數傳遞該數量,改數量會自動變成length的屬性值
var colors2 = new Array(20);
alert(colors2.length);    //20//3.也可以向Array構造函數傳遞數組中應該包含的項。
var colors3 = new Array("red", "blue", "green");//4.給構造函數傳遞一個值時,如果傳遞的是數值,表示該數組的長度。如果傳遞的是其他類型,則會創建包含那個值的數組
var colors4 = new Array(3);    // 創建一個包含3項的數組
var colors5 = new Array("Greg");    //創建一個包含1項的數組//5. 在使用Array構造函數時也可以省略new操作符
var colors6 = Array(3);
var names = Array("Greg");

第二種是使用數組字面量表示法: 數組字面量是由一對包含數組項的方括號表示,多個數組項之間以逗號隔開

var colors = ["red", "blue", "green"];    //創建一個包含三個字符串的數組
var names = [];    //創建一個空數組//在讀取和設置數組的值時,要使用方括號并提供相應值的基于0的數字索引
alert(colors[0]);    //red
colors[2] = "black";
colors[3] = "brown";    //索引大于數組項時,自動增加一個
alert(colors.length);    //4

colors[99] = "black";
alert(colors.length);    //100

1.檢測數組

instanceof :

Array.isArray(): 確定某個值是否為數組

if(Array.isArray(colors)){alert("yes");
}

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

上述代碼顯示的調用了toString()和valueOf()方法,以便返回數組的字符串表示,每個值的字符串表示拼接成了一個字符串,中間以逗號隔開。最后一行代碼直接將數組傳遞給了alert()。由于alert()要接收字符串參數,所以它會在后臺調用toString()方法,由此會得到與直接調用toString()方法相同的結果。

數組繼承的toLocaleString()、toString()和valueOf()方法,在默認情況下都會以逗號分隔的字符串形式返回數組項,如果使用join()方法,則可以使用不同的分隔符來構建這個字符串。join()方法只接收一個參數,即分隔符的字符串。

var colors = ["red", "blue", "green"];    //創建一個包含三個字符串的數組
alert(colors.join("||"));    //red||blue||green

3. 棧方法

ECMAScript數組也提供了一種讓數組的行為類似其他數據結構的方法。

棧是一種LIFO(Last-In-First-Out)的數據結構。也就是最新添加的項最早被移除。棧中項的插入(推入)和移除(彈出),只發生在一個位置上--- 棧的頂部。

push() 方法: 可以接受任意數量的參數,把它們逐個添加到數組的末尾,并返回修改后數組的長度。

pop() 方法: 從數組末尾移除最后一項,減少數組的length值,然后返回移除的項。

var colors = ["red", "blue"];
var count = colors.push("green");
alert(count);    //3

count = colors.push("black");
alert(count);    //4var item = colors.pop();
alert(item);    //black

4. 隊列方法

隊列數據結構的訪問規則是FIFO(First-In-First-Out)。隊列在列表的末端添加項,從列表的前端移除項。

push() 方法: 向數組末尾中添加項。

shift() 方法: 移除數組中的第一項并返回該項。

unshift() 方法: 在數組前端添加任意項并返回新數組的長度。

var colors = new Array();
var count = colors.push("red", "green");
alert(count);    //2

count = colors.push("black");
alert(count);    //3var item = colors.shift();
alert(item);    //red

count = colors.unshift("summer", "chen");
alert(count);    //4
alert(colors);    //summer,chen,green,black

5.重排序方法

數組中已經存在兩個可以直接用來排序的方法:

reverse() 方法: 反轉數組項的順序

sort(): 方法:在默認情況下,按升序排列數組項。sort()方法會調用每個數組項的toString()轉型方法,然后比較得到的字符串。

var values = [0, 1, 3, 15, 5, 10];
values.reverse();
alert(values);    //10,5,15,3,1,0

values.sort();
alert(values);    //0,1,10,15,3,5

sort()方法可以接收一個比較函數作為參數。

比較函數接收兩個參數,如果第一個參數應該位于第二個之前——返回一個負數;兩個參數相等——返回0;第一個參數該位于第二個之后——返回一個正數。

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

對于數值類型 或 其valueOf()方法會返回數值類型的對象類型,可以使用下列方法:

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

6.操作方法

concat() 方法: 基于當前數組中的所有項創建一個新數組。具體來說,這個方法會先創建當前數組的一個副本,然后講接收到的參數添加到這個副本的末尾,最后返回新構建的數組。在沒有給concat()方法傳遞參數的情況下,它只是復制當前數組并返回副本。如果傳遞給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() 方法: 基于當前數組中的一個或多個項創建一個新數組。slice()方法可以接受一個或兩個參數,即要返回項的起始和結束的位置。slice方法不會影響原始數組。

var colors = ["red", "green", "blue", "black", "brown"];//1. 在只有一個參數的情況下,slice方法返回從該參數位置開始到當前數組末尾的所有項
var colors2 = colors.slice(1);
alert(colors2);    //green,blue,black,brown//2.有兩個參數,該方法返回起始位置和結束位置之間的項,不包括結束位置的項
var colors3 = colors.slice(1,3);
alert(colors3);    //green,bluevar colors4 = colors.slice(3,1);
alert(colors4);    //空數組var colors5 = colors.slice(1,1);
alert(colors5);    //空數組var colors6 = colors.slice(5);
alert(colors6);    //空數組var colors7 = colors.slice(3, 15);
alert(colors7);    //black,brown

splice()方法:主要用途是向數組中部插入項。改方法返回被刪除的項。

var colors = ["red", "green", "blue", "black", "brown"];//1. 刪除: 可以刪除任意數量的項,只需指定第一項的位置和要刪除的項數。返回被刪除的項
var colors2 = colors.splice(1,3);
alert(colors2);    //green,blue,black
alert(colors);    //red, brown//2.插入:提供三個參數:起始位置、0(要刪除的項數)、要插入的項
var colors3 = colors.splice(1,0, "summer", "holiday");
alert(colors);    //red,summer,holiday,brownvar colors4 = colors.splice(-1,0, "summer", "holiday");//起始位置小于0時,按0計算
alert(colors);    //red,summer,holiday,summer,holiday,brownvar colors5 = colors.splice(10,0, "summer", "holiday");//起始位置大于數組長度時,按數組長度計算
alert(colors);    //red,summer,holiday,summer,holiday,brown,summer,holiday
alert(colors.length);    //8//3.替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,三個參數:起始位置,要刪除的項數,要插入的項
var colors6 = colors.splice(1, 4, "green", "blue", "black");
alert(colors6);    //summer,holiday,summer,holiday
alert(colors);    //red,green,blue,black,brown,summer,holiday

7. 位置方法

ECMAScript提供了兩個位置方法,這兩個方法都接收兩個參數,要查找的項和查找起點位置的索引(可選的)

indexOf() 方法: 從數組的開頭(位置0)開始向后查找。

lastIndexOf() 方法:從數組的末尾開始向前查找。

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

alert(numbers.indexOf(6));//-1
alert(numbers.lastIndexOf(6));//-1var person = {name: "Nicholas"};
var people = [{name: "Nicholas"}];var morePeople = [person];alert(people.indexOf(person));    //-1
alert(morePeople.indexOf(person));//0

8. 迭代方法

ECMAScript為數組定義了5個迭代方法。每個方法都接收兩個參數: 每一項上運行的函數和運行該函數的作用域對象(可選的)--影響this值。

傳入這些方法中的函數接收三個參數:數組項的值、該項在數組中的位置、數組對象本身

every() 方法:? 對數組中的每一項運行給定函數,如果該函數對每一項都返回true,則返回true

filter() 方法: 對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組

forEach() 方法:對數組中的每一項運行給定函數,該函數沒有返回值

map() 方法:對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組

some() 方法:? 對數組中的每一項運行給定函數,如果該函數對任一項返回true,則返回true

var numbers = [1,2,3,4,5,4,3,2,1];var everyResult = numbers.every(function(item, index, array){return (item > 2);});
alert(everyResult);    //falsevar someResult = numbers.some(function(item, index, array){return (item > 2);});
alert(someResult);    //truevar filterResult = numbers.filter(function(item, index, array){return (item > 2);});
alert(filterResult);    // 3,4,5,4,3var mapResult = numbers.map(function(item, index, array){return (item + 2);});
alert(mapResult);    //3,4,5,6,7,6,5,4,3

9.縮小方法

ECMAScript有兩個縮小數組的方法。這兩個方法都會迭代數組的所有項,然后構建一個最終返回的值。這兩個方法都接收兩個參數,在每一項上調用的函數和作為縮小基礎的初始值。

傳入這些方法的函數接收四個參數:前一個值、當前值、項的索引、數組對象。這個函數返回的任何值都會作為第一個參數自動傳給下一項。第一次迭代發生在數組的第二項上,因此第一個參數是數組的第一項,第二個參數就是數組的第二項。

reduce() 方法: 從數組的第一項開始,逐個遍歷

reduceRight() 方法: 從數組的最后一項開始,向前遍歷到第一項

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

?

轉載于:https://www.cnblogs.com/PrajnaParamita/p/5865487.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283796.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式id解決方案

文章目錄 1.分布式id實現方案 1.1.uuid1.2 數據庫主鍵自增1.3 Redis自增1.4 號段模式1.5 雪花算法&#xff08;snowflake&#xff09; 1.5.1 百度&#xff08;uid-generator&#xff09;1.5.2 美團&#xff08;Leaf&#xff09;所謂id就是能夠用作唯一標識的記號。 在我們日常的…

我和大象的十年往事 - 感恩、感謝、加油、騰飛

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中國信息通信研究院主辦、中國通信標準化協會支持的"OSCAR云計算開源產業大會"于2018年3月21日&#xff0d;22日在國家會議中心舉行。 非常有幸獲得了“OSCAR尖峰開源人物”獎項。 獎項不敢自居&#xf…

Httpclient發送json請求

一、Httpclient發送json請求 public String RequestJsonPost(String url){ String strresponse null; try{ HttpClient hc new DefaultHttpClient(); HttpPost hp new HttpPost(url); JSONObject jsonParam new JSONObject(); jsonParam.pu…

基于ABP的AppUser對象擴展

在ABP中AppUser表的數據字段是有限的&#xff0c;現在有個場景是和小程序對接&#xff0c;需要在AppUser表中添加一個OpenId字段。今天有個小伙伴在群中遇到的問題是基于ABP的AppUser對象擴展后&#xff0c;用戶查詢是沒有問題的&#xff0c;但是增加和更新就會報"XXX fie…

html (align 、placeholder )

onblur 事件會在對象失去焦點時發生。 onkeyup 事件會在鍵盤按鍵被松開時發生。 ----------------------------------------------------------------------------------------------------------- align 屬性規定單元格中內容的水平對齊方式。 <td align"value"&…

4種分布式session解決方案

cookie和session的區別和聯系 cookie是本地客戶端用來存儲少量數據信息的&#xff0c;保存在客戶端&#xff0c;用戶能夠很容易的獲取&#xff0c;安全性不高&#xff0c;存儲的數據量小 session是服務器用來存儲部分數據信息&#xff0c;保存在服務器&#xff0c;用戶不容易獲…

L2-020. 功夫傳人

一門武功能否傳承久遠并被發揚光大&#xff0c;是要看緣分的。一般來說&#xff0c;師傅傳授給徒弟的武功總要打個折扣&#xff0c;于是越往后傳&#xff0c;弟子們的功夫就越弱…… 直到某一支的某一代突然出現一個天分特別高的弟子&#xff08;或者是吃到了靈丹、挖到了特別的…

找數組里沒出現的數

題目&#xff1a;給定整數的數組&#xff0c;其中1≤A [1]≤ N&#xff08;N數組的大小&#xff09;&#xff0c;一些元素出現兩次以及其他出現一次。找到不出現在這個數組中的[1&#xff0c;n ]包含的所有元素。 思路&#xff1a;map的思想。。。。 public List<Integer>…

Blazor University (43)JavaScript 互操作 —— 類型安全

原文鏈接&#xff1a;https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/type-safety/類型安全在從 JavaScript 調用 .NET[1] 部分中&#xff0c;您可能已經注意到我們的 JavaScript 的第 6 行在將隨機生成的數字傳遞給 .NET 之前調用了 toStr…

分享 60 個神級 VS Code 插件

文章來源&#xff1a;juejin.cn/post/6994327298740600839 本文不做任何編輯器的比較&#xff0c;只是我本人日常使用 vscode 進行開發&#xff0c;并且比較喜歡折騰 vscode &#xff0c;會到處找這一些好玩的插件&#xff0c;于是越攢越多&#xff0c;今天給大家推薦一下我收…

URL結構分析

http://bh-lay.com/blog/14b531db64a

PHP 基礎篇 - PHP 中 DES 加解密詳解

2019獨角獸企業重金招聘Python工程師標準>>> 一、簡介 DES 是對稱性加密里面常見一種&#xff0c;全稱為 Data Encryption Standard&#xff0c;即數據加密標準&#xff0c;是一種使用密鑰加密的塊算法。密鑰長度是64位(bit)&#xff0c;超過位數密鑰被忽略。所謂對…

PerfView專題 (第一篇): 如何尋找熱點函數

一&#xff1a;背景 準備開個系列來聊一下 PerfView 這款工具&#xff0c;熟悉我的朋友都知道我喜歡用 WinDbg&#xff0c;這東西雖然很牛&#xff0c;但也不是萬能的&#xff0c;也有一些場景他解決不了或者很難解決&#xff0c;這時候借助一些其他的工具來輔助&#xff0c;是…

3四則運算軟件2016011992

使用JAVA編程語言&#xff0c;獨立完成一個3到5個運算符的四則運算練習的命令行軟件開發 基本功能要求&#xff1a; 程序可接收一個輸入參數n&#xff0c;然后隨機產生n道加減乘除&#xff08;分別使用符號-*來表示&#xff09;練習題&#xff0c;每個數字在 0 和 100 之間…

JAVA高并發多線程必須懂的50個問題

下面是Java線程相關的熱門面試題&#xff0c;你可以用它來好好準備面試。 1) 什么是線程&#xff1f; 線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用…

Centos7設置IP為固定值

1.進入到系統的IP地址保存文件所在目錄 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts 2.修改保存IP信息的文件 [rootlocalhost ~]# vim ifcfg-eth0 &#xff08;你機器上的名字有可能不是這個&#xff0c;但是是以ifcfg-eth開頭的文件&#xff09; 保存后退出 3.重啟…

為 EditorConfig 文件開啟錯誤編譯失敗

前言上次&#xff0c;我們介紹了 EditorConfig 文件可以自定義代碼樣式規則。但是&#xff0c;當我們想設置代碼樣式嚴重性&#xff0c;比如不允許編譯成功時&#xff0c;又踩了不少坑。修改無效想把 var 首選項&#xff0c;從“首選"var" 僅重構”&#xff0c;改成“…

【.NET特供-第三季】ASP.NET MVC系列:傳統WebForm站點和MVC站點執行機制對照

本文以圖形化的方式&#xff0c;從‘執行機制’方面對照傳統WebForm站點和MVC站點。請參看下面圖形&#xff1a; 一、執行機制 當我們訪問一個站點的時候&#xff0c;瀏覽器和server都是做了哪些動作呢&#xff1f; &#xff08;本文僅僅是提供一個簡單的執行過程&#xff0c;有…

hdoj1045 Fire Net(二分圖最大匹配)

題意&#xff1a;給出一個圖&#xff0c;其中有 . 和 X 兩種&#xff0c;. 為通路&#xff0c;X表示墻&#xff0c;在其中放炸彈&#xff0c;然后炸彈不能穿過墻&#xff0c;問你最多在圖中可以放多少個炸彈&#xff1f; 這個題建圖有點復雜orz。 建圖&#xff0c;首先把每一行…

c++的命名空間

一.C的命名原則namespace是指標識符的各種可見范圍&#xff0c;c的所有標識符都被定義在一個名為std的namespace中。1.<iostream>和<iostream.h>是兩個不同的文件&#xff0c;后綴為.h的頭文件c標準已經明確提出不支持了&#xff0c;早些的實現將標準庫功能定義在全…