1. 程式人生 > >js--引用型別Array--1.Array的基礎知識

js--引用型別Array--1.Array的基礎知識

1.檢測陣列

value instanceof Array

但若在兩個以上不同的全域性執行環境下,會存在兩個以上版本的Array建構函式,當一個框架向另外一個框架傳入陣列時,傳入的陣列和第二個框架中原生建立的陣列分別具有不同的建構函式,從而會出錯。

    Array.isArray(value)

這個是ECMAScript5新增的方法,此方法目的是最終確定某個值是否為陣列,不管是在哪個全域性執行環境中建立

2. 轉換方法

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

3. 棧方法

棧是後進先出的資料結構,棧中項的插入和彈出都在棧的頂部。用push()和pop()
push():此方法接收任意數目的引數,將它們逐個新增到陣列末尾,返回修改後的陣列的長度。
pop():此方法從陣列末尾移除最後一項,減少陣列的長度,然後返回移除的項。

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

4. 佇列方法

佇列是先進先出。用push()和shift()
shift():此方法從陣列對頭移除最後一項,減少陣列的長度,然後返回移除的項。
因此,unshift()和pop()可以從相反的佇列來模擬佇列

5.重排序方法(important)

arr.sort([compareFunction])
引數:
compareFunction,可選。用來指定按某種順序進行排列的函式。如果省略,元素按照轉換為的字串的諸個字元的Unicode位點進行排序
如果指明瞭 compareFunction ,那麼陣列會按照呼叫該函式的返回值排序。記 a 和 b 是兩個將要被比較的元素:

var values=[0,1,5,10,15];
alert(values.sort());//0110155是排序結果

sort()排序先呼叫toString()轉型方法,然後比較字串進行排序,數字排序應該寫成

function compare(a,b){
    return a-b;//返回升序序列
    return b-a;//返回降序序列
}
var values = [0,1,5,10,15];
alert(values.sort(compare));

6.操作方法

concat();複製陣列之後,在元素尾部新增元素
方法:
array.concat(value1, value2, …, valueN)
引數:
valueN需要與原數組合並的陣列或非陣列值.

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

如下例子是合併三個陣列

var num1 = [1, 2, 3];
var num2 = [4, 5, 6];
var num3 = [7, 8, 9];

// 組成新陣列[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原陣列 num1, num2, num3 未被修改
var nums = num1.concat(num2, num3);

多個數組和多個非陣列值合併為一個新陣列:

var alpha = ['a', 'b', 'c'];

// 組成新陣列 ["a", "b", "c", 1, 2, 3], 原alpha陣列未被修改
var alphaNumeric = alpha.concat(1, [2, 3]);

slice();劃分陣列
語法:
array.slice([begin[,end]]),提取陣列begin到end的元素,但是包含begin不包含end
引數:
一個或者兩個引數,就是返回項的起始位置和結束位置

var colors = ["green","yellow","orange","blue"];
alert(colors.slice(1,3));//yellow,orange

splice();可以用來刪除,插入,替換陣列中的元素
語法:
array.splice(start, deleteCount[, item1[, item2[, …]]])
引數:
start:從陣列的哪一位開始修改內容。如果超出了陣列的長度,則從陣列末尾開始新增內容;如果是負值,則表示從陣列末位開始的第幾位。
deleteCount:
整數,表示要移除的陣列元素的個數。如果 deleteCount 是 0,則不移除元素。這種情況下,至少應新增一個新元素。如果 deleteCount 大於start 之後的元素的總數,則從 start 後面的元素都將被刪除(含第 start 位)。
items:
要新增進陣列的元素。如果不指定,則 splice() 只刪除陣列元素。

//splice()可以用於刪除陣列中的某個元素
 for(var i = 0;i < array.length;i++) {
   if(content === array[i]) {
   //第一個引數是要刪除的第一項,第二個引數是要刪除的項數
     array.splice(i,1);
   }
 }
 //splice()可以用於插入元素到陣列中
 //引數:1.插入的位置2.刪除項數3.插入元素
 var colors = ["green","blue"];
 colors.splice(1,0,"yellow","orange");
 alert(colors);//green,yellow,orange,blue
 //splice()可以用於替換元素到陣列中
 //引數:1.起始位置2.刪除項數3.插入元素
 var colors = ["green","yellow","orange","blue"];
 colors.splice(1,1,"red","purple");
 alert(colors);//green,red,purple,orange,blue

7. 位置方法

indexOf();
語法:
arr.indexOf(searchElement[, fromIndex = 0])
引數:
searchElement
要查詢的元素
fromIndex
開始查詢的位置。如果該索引值大於或等於陣列長度,意味著不會在數組裡查詢,返回-1。如果引數中提供的索引值是一個負值,則將其作為陣列末尾的一個抵消,即-1表示從最後一個元素開始查詢,-2表示從倒數第二個元素開始查詢 ,以此類推。 注意:如果引數中提供的索引值是一個負值,仍然從前向後查詢陣列。如果抵消後的索引值仍小於0,則整個陣列都將會被查詢。其預設值為0.

var array = [2, 5, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

lastIndexOf();
二者都返回查詢的項在陣列中的位置;
接收引數:1. 要查詢的項 2. 查詢起點位置的索引(可選)

8. 迭代方法

語法:
arr.every(callback[, thisArg])
ps:其他幾個類似
引數:
1.callback要在每一項上執行的函式
2.執行該函式的作用域物件(可選)
callback 被呼叫時傳入的引數
1.陣列項的值
2.該項在陣列中的位置
3.陣列物件本身
every():
對陣列中的每一項執行給定函式,若該函式對每一項都返回true,則返回true,若有一個返回false,則不執行接下來的回撥,立即返回false

var isNum = function(item,index,array) {
        return (item>2);
    }
    var res = arr.every(isNum);
    console.log(res);//false;
    或者
    var res = arr.every(function(item,index,array){
      return (item>2);
    });
    console.log(res);//false;

some():
對陣列中的每一項執行給定函式,若該函式對某一項返回true,則立即返回true,不執行接下來的回撥。
forEach():
對陣列中的每一項執行給定函式,這個方法沒有返回值

function logArrayElements(element, index, array) {
    console.log("a[" + index + "] = " + element);
}
[2, 5, 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9

filter():
對陣列中的每一項執行給定函式,返回該函式會返回true的項組成的陣列,被刪除或從來未被賦值的元素不會被遍歷到。

function isBigEnough(element) {
  return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

map():
對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
/* roots的值為[1, 2, 3], numbers的值仍為[1, 4, 9] */

9. 歸併方法

EMCAScript5新添了reduce()和reduceRight()兩個方法都迭代陣列中所有的項,然後構建一個最終返回的值。
reduce(): 從第一項遍歷到最後
reduceRight()按降序索引順序處理元素。
語法
array1.reduce(callbackfn[, initialValue])
引數:
callbackfn:回撥函式
(傳入這些方法中的函式會接收四個引數:previousValue,currentValue
,currentIndex和array)
通過上一次呼叫回撥函式獲得的值。如果向 reduce 方法提供 initialValue,則在首次呼叫函式時,previousValue 為 initialValue。
initialValue
作為歸併基礎的初始值(可選)
如果指定 initialValue,則它將用作初始值來啟動累積。第一次呼叫 callbackfn 函式會將此值作為引數而非陣列值提供。
返回值
通過最後一次呼叫回撥函式獲得的累積結果。

function addDigitValue(previousValue, currentDigit, currentIndex, array) {
    var exponent = (array.length - 1) - currentIndex;
    var digitValue = currentDigit * Math.pow(10, exponent);
    return previousValue + digitValue;
}
var digits = [4, 1, 2, 5];
// Determine an integer that is computed from values in the array.
var result = digits.reduce(addDigitValue, 0);
document.write (result);
// Output: 4125

10.二元陣列的建立

var data = [];
for(var i = 0;i < len;i++){
    //二元陣列
    data[i] = [];
    //二元陣列賦值方法1
    data[i][0] = arr[i].firstChild.substringData(0,2);
    data[i][1] = arr[i].lastChild.innerHTML;
    //二元陣列賦值方法2
    data[i].push(arr[i].firstChild.substringData(0,2));
    data[i].push(arr[i].lastChild.innerHTML);
}