標籤:sum case 添加元素 取數 順序 .so 實值型別 替換 join
Array 對象是一個複合類型,用於在單個的變數中儲存多個值,每個實值型別可以不同。
建立數組對象的方法:
new Array();new Array(size);new Array(element0, element1, ..., elementn);
1. 當索引值為負數時,會將其看作是對象的一個屬性,若為非負的數字字串,則會隱式轉換為數字索引:
var a= new Array(); a[-1.23]=true; a[1]="pomelo"; a["100"]="tt"; console.log(a); /// [1: "pomelo", 100: "tt", -1.23: true] console.log(a.length) /// 101 稀疏數組的長度為最大下標+1
其實數組對象的索引其實就是對象屬性名稱的一種特殊形式,當試圖查詢任何對象屬性名稱時,不會報錯,而會顯示undefined:
console.log(a["hello"]); //undefined
2. length屬性可以用於置空數組或從前向後截取數組:
var array1=[1,2,3,4,5]; array1.length=3; ///[1,2,3] array1.length=0; ///[] array1.length=5; ///[] 長度為5的空數組 console.log(array1)
可以使用Object.defineProperty(對象,屬性名稱,{設定})方法設定可讀可寫:
Object.defineProperty(array1,"length",{writable:false}); array1.length=10; console.log(array1.length); ///5
3.數組元素的添加和刪除:
末尾:添加元素push(),刪除元素pop();
首部:添加元素unshift(),刪除元素shift();
var array2=[1,2,3,4,5]; array2.unshift(6); ///[6,1,2,3,4,5] array2.shift(); //[1,2,3,4,5] console.log(array2);
4.數組的便利最佳化與篩選
當數組容量很大時,length不應在每次迴圈中都查詢;
當需要過濾數組中的無效資料時,用continue跳出本次迴圈;
var array3=[null,1,0,undefined];
for(var i= 0,len=array3.length;i<len;i++){
if(!array3[i]) continue;
console.log(array3[i]); //1
}
或者利用ES5內建的foreach()方法:
var array4=[1,2,3,4]; var sum=0; array4.forEach(function(i){ sum+=i; }); console.log(sum); ///10
5.js不支援多維陣列,但可以通過數組的數組來實現:
var array5=new Array(10); for(var i=0;i<array5.length;i++){ array5[i]=new Array(10); } for(var i=0;i<array5.length;i++){ for(var j=0;j<array5[i].length;j++){ array5[i][j]=i*j; } } console.log(array5[5][6]); //30
6.數組方法
6.1 join() 將數組轉化為字串並串連在一起
var array6=[1,2,3]; console.log(array6.join("-")); // 1*2*3 console.log(array6.join("")); // 123 console.log(array6.join()); // 1,2,3 console.log(typeof array6.join()); // String
6.2 reverse() 在原數組本身基礎上將元素順序顛倒
var array7=[1,2,3];
console.log(array7.reverse()) //[3,2,1]
6.3 sort() 數組排序
var array8=["apple","cherry","cherry"]; console.log(array8.sort()); //["apple", "cherry", "cherry"] array8.push(undefined); console.log(array8.sort()); //undefined會被放到最後 ["apple", "cherry", "cherry", undefined]
若想改變定序,需要傳入一個比較函數:
var array9=[33,4,11,222]; console.log(array9.sort()); //11,222,33,4 預設以第一個數字比較 console.log(array9.sort(function(a,b){ //從小到大排列 return a-b; }))
字元排序預設區分大小小,以首字母ASCII編碼為根據,從小到達排序:
var array10=["ant","Boy","cat","Dog"]; console.log(array10.sort()); //["Boy", "Dog", "ant", "cat"] console.log( array10.sort(function(s,t){ var a= s.toLowerCase(); var b= t.toLowerCase(); if(a<b) return -1; if(a>b) return 1; return 0; }) ); // ["ant", "Boy", "cat", "Dog"]
6.4 concat() 數組串連
var array11=[1,2,3]; console.log(array11.concat(4,5)); //[1,2,3,4,5] console.log(array11.concat([4,5])); //[1,2,3,4,5] console.log(array11.concat("4",[5,[6,[7,8]]])) //[1, 2, 3, "4", 5, Array[2]]
6.5 slice(第一個位置,第二個位置)
返回從第一個位置(包括)到第二個位置的子數組;
如果只制定一個參數,則返回從指定位置到數組結尾的所有元素組成的子數組;
若參數出現負數,則標識從後往前數的位置下標;
var array12=[1,2,3,4,5]; console.log(array12.slice(0,3)); //[1,2,3] console.log(array12.slice(3)); //[4,5] console.log(array12.slice(-1)); //[5] console.log(array12.slice(1,-1)); //[2,3,4]
6.6 splice(插入或刪除的起始位置,刪除元素的個數) 在數組中插入、刪除或替換元素的通用方法:
var array13=[1,2,3,4,5,6,7,8]; //刪除 console.log(array13.splice(4)); //[5,6,7,8] console.log(array13); //[1,2,3,4] console.log(array13.splice(1,2)); //[2,3] console.log(array13); // [1,4] //插入 array13.splice(1,0,"pomelo"); console.log(array13); //[1, "pomelo", 4] //替換 var array14=[1,2,3,4,5]; array14.splice(2,1,"pomelo"); //[1, 2, "pomelo", 4, 5] console.log(array14)
6.7 map() 將調用此函數的數組的每個元素傳遞給指定函數:
var array15=[1,2,3]; var array16=array15.map(function(i){ return i*i; }); console.log(array16) //[1,4,9]
-------------持續更新中-----------
javascript數組詳解(js數組深度解析)