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};
forEach
、map
、filter
、reduce
forEach
吸收一個函數,這個函數吸收三個參數(value
,key
,array
),value
是array
的元素,key
是array
的索引,array
是forEach
正在操縱的數組(可選)。
假如本身建立一個forEach
函數會怎樣寫呢?
先本身建立一個forEach
函數,它吸收兩個參數(array
,fn
),array
是數組,fn
是函數;然後在內部遍歷array
,同時挪用fn
函數,並傳入兩個參數(value
,key
)array
的第一項是value
,array
的索引是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
遍曆數組每一項,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
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]});