1. 程式人生 > >Array物件屬性和方法參考

Array物件屬性和方法參考

快速搜尋:ctrl+f

建立Array物件

  • 通過new關鍵字:
    var arr1=new Array();
    var arr2=new Array(5); //初始化陣列大小為5
    var arr3=new Array(“aa”,”bb”,”cc”); //初始化陣列值

  • 通過字面量
    var arr=[“aa”,”bb”,”cc”];

注:以下arr表示一個數組,Array表示Array建構函式

屬性

  • arr.index 通過匹配正則表示式得到的子字串陣列(不使用全域性模式,只得到1個結果)具有index屬性,返回子字串第一個字元在源字串中的索引位置
var
str="hello world say hello"; var reg=/llo/ var arr=str.match(reg); arr.index; //2
  • arr.input 通過匹配正則表示式得到的子字串陣列(不使用全域性模式,只得到1個結果)具有input屬性,返回源字串
var str="hello world say hello";
var reg=/llo/
var arr=str.match(reg);
arr.input;  //hello world say hello
  • arr.length 陣列中所包含元素的值,該屬性既可以讀取也可以寫入。如果將length設為比原來值更大,則有新的元素被追加到陣列中;如果將length設為比原來值更小,則陣列將從尾部被截短。
var arr=["aa","bb","cc","dd"];
arr.length;  //4
arr.length=6;
arr;  //["aa","bb","cc","dd",undefined,undefined]
arr.length=2;
arr;  //["aa","bb"]
  • arr.constructor 返回arr是由哪個原型構造的
var arr = new Array();
arr.constructor == Array;  //true
  • Array.prototype 在物件的原型上新增新的屬性或方法
Array.prototype.text="abc"
; //在原型上新增新的屬性 Array.prototype.getText=function(){ return "hello world"; } var arr=new Array(); arr.text; //abc arr.getText(); //hello world

方法

1.簡單運算元組

  • arr1.concat(element0,…,elementN) 將一個數組與另一個數組或者元素合併,該方法不會改變源陣列。
var arr1=["a","b","c"];
var arr2=["d","e","f"];
arr1.concat(arr2);  //["a","b","c","d","e","f"]
arr1.concat(10,11,12,13);  //["a","b","c",10,11,12,13]
  • arr.join(separator) 使用指定分隔符,將所有的陣列元素連線為一個字串,該方法不會改變源陣列。
var arr=["我","要","合","體"];
arr.join("o0-0o"); //我o0-0o要o0-0o合o0-0o體
  • arr.indexOf(searchelement[,start]) 搜尋一個數組,以查詢指定元素在陣列中第一次出現的位置,如果沒有找到,返回-1。
var arr=["one","two","three","four","one","five","nine"];
arr.indexOf("two");  //1
arr.indexOf("ten");  //-1
arr.indexOf("one",2);  //4
arr.indexOf("one",-5);  //4,用負數可以表示從倒數第幾個開始查詢
  • arr.lastIndexOf(searchelement[,start]) 搜尋一個數組,以查詢指定元素在陣列中最後一次出現的位置,如果沒有找到,返回-1。原來是從右往左查詢,返回找到的第一個的位置。
var arr=["one","two","three","four","one","five","nine"];
arr.lastIndexOf("one");  //4
arr.lastIndexOf("ten");  //-1
arr.lastIndexOf("one",2);  //0,從第二個開始向左查詢
arr.lastIndexOf("one",-1);  //4,用負數可以表示從倒數第幾個開始查詢
  • arr.pop() 返回陣列中的最後一個元素,並將其從陣列中移除,該方法會改變源陣列。
var arr=["one","two","three","four","one","five","nine"];
arr.pop();  //nine
arr;  //["one","two","three","four","one","five"]
  • arr.shift() 返回陣列中的第一個元素,並將其從陣列中移除,該方法會改變源陣列。
var arr=["one","two","three","four","one","five","nine"];
arr.shift();  //one
arr;  //["two","three","four","one","five","nine"]
  • arr.push(val1,val2,…) 將一個或多個元素新增到陣列尾部,並返回最終的陣列長度,該方法會改變源陣列。
var arr=["one","two","three"];
var len=arr.push('four','five');
len;  //5
arr;  //["one","two","three","four","five"]
  • arr.unshift(val1,val2,…) 將一個或多個元素新增到陣列開頭,並返回最終的陣列長度,該方法會改變源陣列。
var arr=["one","two","three"];
var len=arr.unshift('four','five');
len;  //5
arr;  //["four","five","one","two","three"]
  • arr.reverse() 反轉元素中的順序,該方法會改變源陣列。
var arr=["one","two","three"];
arr.reverse();  //["three","two","one"]
  • arr.slice(beginIndex[,endIndex]) 複製陣列中的一部分,並返回一個新陣列,該方法不會改變源陣列。傳入兩個引數都是整數時,第二個引數必須大於第一個引數,這樣才能返回一個有價值的結果。左閉右開區間
var arr=["one","two","three","four","five","nine"];
arr.slice(3);  //["four","five","nine"]
arr.slice(-1);  //["nine"],負數代表從倒數開始
arr.slice(3,5);  //["four","five"]
arr.slice(3,-1);  //["four","five"]
arr.slice(3,2);  //[]
  • arr.sort([sortFn]) 為陣列指定排序規則並對整陣列排序,如果省略sortFn則將按升序對元素進行排序,返回已拍好的陣列,該方法會改變源陣列。
var arr=["one","two","three","four","five","nine"];
arr.sort();  //["five", "four", "nine", "one", "three", "two"]
function CompareForSort(first, second)
{
    if (first == second)
        return 0;
    if (first > second)
        return -1;
    else
        return 1; 
}
arr.sort(CompareForSort);  //["two", "three", "one", "nine", "four", "five"]
  • arr.splice(start,deleteCount,[element0[,…]]) 從 start 位置開始移除指定個數deleteCount個元素,並插入新元素[element0[,…]。返回值是一個由所移除的元素組成的新 Array 物件。
var arr=["one","two","three","four","five","nine"];
arr.splice(1,2,"哈哈","拜拜");  //["two","three"]
arr;  //["one","哈哈","拜拜","four","five","nine"]
  • arr.toLocaleString() 將陣列轉換為本地字串。
    • arr.toString() 將陣列轉換為字串。
var arr=["one","two","three"];
arr.toLocaleString();  //one,two,three
arr.toString();  //one,two,three
  • arr.valueOf() 返回物件基本值
var arr=["one","two","three"];
arr.valueOf();  //one,two,three

2.定義callback函式

  • arr.every(callbackFn[,thisObject]) 檢查一個數組中的每個元素是否都符合callback中定義的規則,返回true或false。thisObject可以為callbackFn引用this關鍵字的物件,如果省略,則undefined將用作this值。只要檢測到false就停止並返回false,undefined的元素不執行回撥。
  • arr.some(callbackFn[,thisObject]) 如果至少有一個元素通過了測試,則返回true,否則返回false。
  • arr.filter(callbackFn[,thisObject]) 返回一個包含所有通過測試元素的陣列。
  • arr.map(callbackFn[,thisObject]) 對陣列中每個元素呼叫callbackFn函式,並返回包含結果的陣列(true/false)。
  • arr.forEach(callbackFn[,thisObject]) 陣列中每個元素(缺少的元素除外)都呼叫一次callbackFn函式。

用法類似,以every()為例:

var arr1=["one","two","three","four","five","nine"];
var arr2=[];
function isLong(value,index,array){
    return (value.length>2);
}
arr1.every(isLong);  //true
arr2.every(isLong);  //true,空陣列也返回true

var numbers=[10,15,19];
function checkNum(value){
    return (value>this.min);
}
var obj={min:9}
numbers.every(checkNum,obj);  //true,傳入obj引用this關鍵字
  • arr.reduce(callbackFn[,initialValue]) 對陣列中的所有元素按照從左到右的順序呼叫指定的回撥函式。該回調函式的返回值為累積結果,並且每一次的返回值作為下一次的引數。如果提供了initialValue,則第一次的preValue為initialValue,否則為陣列中第一個元素。回撥函式的引數可以有四個function(previousValue,currentValue,currentIndex,array)
  • arr.reduceRight() 同reduce(),只是陣列中的元素按照從右到左的順序呼叫函式。
    方法類似,以reduce()為例:
function appendCurrent (previousValue, currentValue) {
    return previousValue + "::" + currentValue;
}
var arr=["abc", "def", 123, 456];
arr.reduce(appendCurrent);  //abc::def::123::456

3.ES6新增方法

  • Array.from(array-like) 將類似陣列的物件或者可遍歷的物件(包括ES6新增的資料結構Set和Map)轉換為真正的陣列
let arrayLike = {
    '0':'a',
    '1':'b',
    '2':'c',
    length:3
};
let arr2=Array.from(arrayLike);
arr2;//["a", "b", "c"]

let str='hello';
let str2=Array.from(str);
str2;//["h", "e", "l", "l", "o"]
  • Array.of() Array.of()基本可以代替Array()或new Array(),並且不存在由於引數不同而導致的過載
var arr=Array.of(3,4,5);
arr;//[3, 4, 5]
  • arr.copyWithin(target, start, end) 將陣列arr中start位置到end位置(不包括end位置)的值,從target位置開始覆蓋arr陣列中原來的值,原陣列會被改變
[0,1,2,3,4,5].copyWithin(0,1,2);//[1,1,2,3,4,5]
[0,1,2,3,4,5].copyWithin(0,-2,-1);//[4,1,2,3,4,5] 負數代表倒數
  • arr.find(callback) 陣列中所有成員依次執行該回調函式,直到找出第一個返回值為true的成員,然後返回該成員,如果沒有符合條件的成員,則返回undefined。可以發現NaN,彌補了indexOf的不足。
var arr=[1,2,3,4,5];
arr.find((n)=> n>3);//4
[NaN].find(n=>Object.is(NaN,n));//NaN
  • arr.findIndex(callback) findIndex方法和find方法類似,但是findeIndex返回的是第一個符合條件的陣列成員的位置,如果所有成員都不符合條件則返回-1。
var arr=[1,2,3,4,5];
arr.findIndex((n)=> n>3);//3
  • arr.fill(value, start, end) 將[start,end)位置的值使用給定值fillvalue填充,start和end省略則填充整個陣列,用於空陣列的初始化很方便。
var arr=new Array(3).fill('a');
arr;//["a", "a", "a"]

arr.fill('b',1,2);//["a", "b", "a"]
  • arr.entries() 遍歷鍵值對
  • arr.keys() 遍歷鍵名
  • arr.values() 遍歷鍵值
var arr=['a','b','c'];
for(let element of arr.entries){
    console.log(element);
}
//[0,"a"]
//[1,"b"]
//[2,"c"]

for(let index of arr.keys()){
    console.log(index);
}
//0
//1
//2

for(let val of arr.values()){
    console.log(val);
}
//'a'
//'b'
//'c'
  • arr.includes(val, start) 類似字串的includes,返回一個布林值,表示某個陣列是否包含給定的值,start為空則表示從頭開始,該方法屬於ES7,但高版本chrome已經能支援
[1,2,3].includes(2);//true
['1','2','3'].includes(2);//false