JavaScript 數組

數組的聲明和讀寫

  1. 數組字面量聲明javascript

    var arr = [1, 2, 3, 4];
    複製代碼
  2. 構造函數聲明java

    var arr = new Array(1, 2, 3);
    複製代碼
  3. 類型轉換聲明數組

    var arr = Array(1, 2, 3);
    複製代碼

    全部數組都繼承於 Array.prototypemarkdown

    若是隻給構造函數一個參數 num,則是聲明一個長度爲 num 的數組,內容都爲 empty,即 undefineddom

  4. 稀鬆數組函數

    var arr = [, 2, , 4,];
    console.log(arr);
    // empty, 2, empty, 4
    複製代碼

    數組字面量能夠定義稀鬆數組,打印數組未給值處打印出 empty,其實是 undefined,須要注意最後一個 「,」 不算ui

  5. 數組基於對象的鍵值對this

    var arr = [1, 2, 3, 4, 5];
    var obj = {
    	0: 1,
    	1: 2,
    	2: 3,
    	3: 4
    };
    複製代碼

    Array 重寫了 Object 的 toString 方法spa

  6. 數組的讀寫prototype

    使用下標(索引),讀對應位置的數據,沒有則返回 undefined

    var arr = [, 2, , 4,];
    arr[0] = 1;
    複製代碼

push() 和 unshift()

push、unshift 方法繼承自 Array.prototype

push 在數組最後一位後添加一位,unshift 在第一位前添加一位

參數爲要添加的內容,能夠是多個

返回數組添加後的長度

var arr = [1, 2, 3];
arr.push(4, 5);
arr.unshift(0);
console.log(arr);
// [0, 1, 2, 3, 4, 5]
複製代碼

pop() 和 shift()

pop、shift 方法繼承自 Array.prototype

pop 刪除數組最後,shift 刪除第一位

返回被刪除的數值

var arr = [1, 2, 3];
console.log(arr.pop());
console.log(arr);
console.log(arr.shift());
console.log(arr);
// 3
// 1, 2
// 1
// 2
複製代碼

reverse()

reverse 方法繼承自 Array.prototype

顛倒原數組內容並返回顛倒後的數組

var arr = [1, 2, 3];console.log(arr.reverse());// [3, 2, 1]
複製代碼

splice()

splice 方法繼承自 Array.prototype

剪切數組中內容,能夠剪切位置添加數據,會影響原數組

參數:開始的下標,剪切的長度,在開始下標位置添加的數據

返回剪切下的子數組

var arr = [1, 2, 3];console.log(arr.splice(1));console.log(arr);// [2, 3]// [1]
複製代碼

只給第一個參數,剪切從開始下標到最後的全部數據

若是是負數,則從 -1 開始由後往前數

var arr = [1, 2, 3];console.log(arr.splice(1, 1));console.log(arr);// [2]// [1, 3]
複製代碼

給兩個參數,表明開始下標和剪切長度

var arr = [1, 2, 3];console.log(arr.splice(1, 1, 100, 101));console.log(arr);// [2]// [1, 100 ,101, 3]
複製代碼

給三個參數,剪切後在開始下標位置後添加數據

slice()

和 splice() 功能類似,複製數組中內容並返回,可是不會影響到原數組

參數:開始下標,結束下標,不包括結束下標,左閉右開

var arr = [1, 2, 3];console.log(arr.slice(0, 2));console.log(arr);// [1, 2]// [1, 2, 3]
複製代碼

sort()

sort 方法用於數組排序,繼承自 Array.prototype

默認按照 ASCII 碼進行排序

改變原數組內容並返回排序之後的數組

```javascriptvar arr = [1, 4, 2, 3, 30];console.log(arr.sort());// [1, 2, 3, 30, 4]```
複製代碼

sort 方法給一個函數 function(a, b){},若是返回正數,則將 a 排在 b 後,不然 a 排在 b 前

var arr = [1, 3, 14, 27, 5, 4];console.log(arr.sort(function(a, b) {	return a - b;}));// [1, 3, 4, 5, 14, 27]
複製代碼

利用 Math.random() 返回 (0, 1) 之間的隨機數結合 sort 方法實現數組隨機排序 由於 Math.random() - 0.5 返回一個 (-0.5, 0.5) 之間的隨機數

var arr = [1, 2, 3, 4, 5, 6];console.log(arr.sort(function(a, b) {	return Math.random() - 0.5;}));
複製代碼

concat()

用於鏈接兩個數組,返回拼接後的數組,參數爲要在後面拼接的數組

var arr1 = [1, 2, 3];var arr2 = [4, 5, 6];console.log(arr1.concat(arr2));// [1, 2, 3, 4, 5, 6]
複製代碼

toSting()

將數組轉換成字符串,返回該字符串,用逗號分隔

var arr = [1, 2, 3];console.log(arr.toString());
複製代碼

jion() 和 split()

  1. jion 方法將數組轉換成字符串,返回該字符串,參數做爲分隔符

  2. split() 方法將字符串裝換成數組,返回該數組第一個參數做爲分隔符,第二個參數表示返回前幾位,不給則所有返回

    var arr = [1, 2, 3];str = arr.join('-');console.log(str);console.log(str.split('-'));console.log(str.split('-', 2));// 1-2-3// [1, 2, 3]// [1, 2]
    複製代碼

filter()

兼容 IE9 及以上

用於對數組內容進行過濾,參數方法返回值決定對應元素的去留,若返回 false 則剔除該元素

// 數組去重示例var arr = [0, 1, 2, 2, 3, 4, 4, 0, 1];funtion uniqe(arr) { return arr.filter(function(item, index, arr) { //當前元素在數組中的第一個索引 === 當前索引值,則該元素沒有重複 return arr.indexOf(item) === index; });}// 方法缺陷:不能去除 [{}, {}]
複製代碼

類數組

  1. 類數組是是一種相似數組,如 arguments、NodeList 等,它們有 length 屬性,甚至有 forEach 屬性

  2. 類數組沒有繼承 Array.prototype,沒有 push、splice 等方法

  3. 類數組和數組的底層都是基於對象的鍵值對

  4. 不支持數組方法的類數組,能夠經過借用 Array.prototype 實現操做

    var obj = {    2: 3,    3: 4,    length: 2,    push: Array.prototype.push}obj.push(1);obj.push(2);console.log(obj);// {// 2: 1,// 3: 2,// length: 4,// push: push(){}// __poroto__: {...}// }
    複製代碼

    對於這是道題,首先咱們要明白數組的 push 方法繼承於 Array.prototype,其次要了解 push 方法的內部過程,即在 length 位置存數據,而後 length 加一

    Array.prototype.push = function (elem) {    this[this.length++] = elem;}
    複製代碼
相關文章
相關標籤/搜索