Array
基本概念Array
能夠使用new
關鍵字建立 。var a = new Array(1,2,3,4);
=== var a = Array(1,2,3,4);
=== var a = [1,2,3,4];
segmentfault
若是Array
接受一個參數,那麼這個參數是length
的長度;
若是Array
接受多個參數,那麼就不是length
,是一個普通數組。數組
var a = Array(3) //會生成一個length=3的數組 var a2 = Array(3,3) //[3,3]
數組是特殊的對象,用對象建立數組(以下代碼),那和直接建立數組的區別是:用對象建立的數組沒有數組的原型(公有屬性),也就是說用對象建立數組,它的__proto__
直接指向Object
的原型,跳過Array
的原型。一張圖說明prototype和__proto__的區別函數
var a = [1,2,3]; var obj = { 0:1, 1:2, 2:3, length:3};
forEach
、map
、filter
、reduce
forEach
接受一個函數,這個函數接受三個參數(value
,key
,array
),value
是array
的元素,key
是array
的索引,array
是forEach
正在操做的數組(可選)。this
若是本身建立一個forEach
函數會怎麼寫呢?
先本身建立一個forEach
函數,它接收兩個參數(array
,fn
),array
是數組,fn
是函數;而後在內部遍歷array
,同時調用fn
函數,並傳入兩個參數(value
,key
)array
的第一項是value
,array
的索引是key
。prototype
function forEach(array,fn){ for(var i = 0; i < array.length; i++){ fn(array[i],i); } } forEach(["aa","bb","cc","dd","ee","ff"].function(value,key){ console.log(value,key); } /* aa 0 bb 1 cc 2 dd 3 ee 4 ff 5 */ })
調用foreach
時傳入一個數組和一個函數,內部過程:遍歷數組,並對數組中的每一項調用函數,調用函數的時候會傳入兩個參數(value
,key
),這個數組有6項,傳6次,每次不同的value
不同的key
。code
再來看forEach
這個API(以下代碼) ,它接受一個函數,這個函數接受兩個參數(value
,key
),那麼它爲何只接受一個函數做爲參數了,數組去哪裏了?對象
var a = ["aa","bb","cc","dd","ee","ff"]; a.forEach(function(value,key){console.log(value,key)});
看一下a.forEach
內部過程。首先建立一個obj
的對象,它內部沒有forEach
這個方法,在外面給它強行添加forEach
,而後就像普通對象同樣調用forEach
就能夠了。排序
var obj = { 0:"a", 1:"b", length:2 }; obj.forEach = function(fn){ for(var i = 0; i < this.length; i++){ fn(this[i],i); } } obj.forEach(function(value,key){console.log(value,key)});
forEach
遍歷數組每一項,map
和forEach
的區別是map
有返回值。filter
有條見的篩選。
先調用filter
篩選出偶數,再調用map
乘上2,得出結果索引
var a = [1,2,3,4,5,6,7,8,9]; a.filter(function(value){ return value % 2 === 0 }).map(function(value2){ return value2 * value2; }); // [4,16,36,64]
用reduce
代替map
和filter
get
var a = [1,2,3,4,5,6,7,8,9] a.reduce(function(arr,n){ arr.push(n*2); return arr; },[]); //[2,4,6,8,10,12,14,16,18] a.reduce(function(arr,n){ if(n % 2 === 0){ arr.push(n); } return arr; },[]); //[2,4,6,8,10]
sort
重排序方法reverse
反向排序數組項,原數組也被逆序了。sort
會按照升序排列數組。
sort
能夠接受一個比較函數做爲參數,能夠實現降序排列
var students = ['小明','小紅','小花']; var scores = { 小明: 59, 小紅: 99, 小花: 80 }; students.sort(function (value1,value2){return scores[value2] - scores[value1]});