Array基本概念

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};

forEachmapfilterreduce

forEach接受一個函數,這個函數接受三個參數(value,key,array),valuearray的元素,keyarray的索引,arrayforEach正在操做的數組(可選)。this

若是本身建立一個forEach函數會怎麼寫呢?
先本身建立一個forEach函數,它接收兩個參數(array,fn),array是數組,fn是函數;而後在內部遍歷array,同時調用fn函數,並傳入兩個參數(value,keyarray的第一項是valuearray的索引是keyprototype

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不同的keycode

再來看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遍歷數組每一項,mapforEach的區別是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代替mapfilterget

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]});
相關文章
相關標籤/搜索