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

假如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正在操縱的數組(可選)。

假如本身建立一個forEach函數會怎樣寫呢?
先本身建立一個forEach函數,它吸收兩個參數(array,fn),array是數組,fn是函數;然後在內部遍歷array,同時挪用fn函數,並傳入兩個參數(value,keyarray的第一項是valuearray的索引是key

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

再來看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替代mapfilter

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]});
    原文作者:UCCs
    原文地址: https://segmentfault.com/a/1190000014841467
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞