靜態成員
- from:將僞數組轉換爲真數組
let args = Array.from(arguments);
- isArray 判斷給定的數據是不是真數組(真數組:通過Array構造器構造的數組)
- of Array.of()與new Array()的區別,如果只有一個參數n,前者表示數組只有一位,值爲n;後者表示創建一個長度爲n的空數組
實例成員
會改變原數組
- fill 填充數組,將數組的指定區間的值換爲某個固定值 fill(val,a,b); // fill with val from position a until position b
- pop 刪除數組的最後一位並返回
- push 在數組末尾新增一個元素並返回數組長度
- reverse 將數組顛倒順序
- shift 刪除數組的第一個元素並返回
- unshift 將一個或多個元素添加到數組的開頭,並返回該數組的新長度
- sort 排序
- splice splice(n1,n2,a,b,c…) 從第 n1 位開始刪除 n2 個元素,插入a , b, 和 c …
不會改變原數組
- concat
var newArr = arr1.concat(arr2,arr3...)
返回鏈接後的新數組 - includes 是否包含滿足條件的元素 arr.includes(val,n) 第二顆參數可傳可不穿,表示從下標爲n的位置開始,是否包含val(嚴格比較)
- join 將一個數組(或一個類數組對象)的所有元素連接成一個字符串並返回這個字符串。如果數組只有一個項目,那麼將返回該項目而不使用分隔符。如果省略參數,數組元素用逗號分隔。默認爲 “,”
- slice 返回一個新的數組對象,這一對象是一個由 begin 和 end 決定的原數組的淺拷貝(包括 begin,不包括end)。
- toString 返回一個表示該對象的字符串。
- indexOf 返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。
- lastIndexOf 返回在數組中可以找到一個給定元素的最後一個索引,如果不存在,則返回-1。
迭代方法
- forEach
//forEach 不會改變原數組 返回undefined 不允許中途break
let arr = [1,2,3,4,5];
arr.forEach(function (val,index) { //如果有第三個參數,此參數爲該數組
console.log(val,index);
})
//
Array.prototype.myForEach = function(func){
for(let i = 0; i < this.length; i++){
func(this[i],i);
// return ;
}
}
- every 判斷數組的所有元素是否都滿足條件(返回true/false)
var arr = [2,3,4,-1];
var noZero = arr.every(function(val,index,arr){
return val !== 0;
})
- some 判斷數組中是否有元素滿足條件(只要又一個滿足就返回true)
var arr = [1,2,3,-1];
var negative = arr.some(function(val,index,arr){
return val < 0;
})
- filter 過濾器
// filter 篩選 返回新的數組
var arr = [1,2,3,4,5];
var newArr = arr.filter(function (val,index) {
return val >= 2;
})
console.log(newArr);
Array.prototype.myFilter = function (func) {
let len = this.length,
newArr = [];
for(let i = 0;i < len; i++){
if(func(this[i],i))
newArr.push(this[i]);
}
return newArr;
}
var myArr = arr.myFilter(function(val,index){
return val > 2;
})
console.log(myArr);
- find 查找第一個滿足條件的元素,返回元素本身,如果沒有找到,返回undefined
var person = [{
name:'a',
age:17,
},
{
name:'b',
age:18,
},
{
name:'c',
age:19,
}];
var findAdult = person.find(function(val,item){
return val.age >= 18;
});
//findAdult : {name: "b", age: 18}
- findIndex 查找第一個滿足條件的元素,返回元素下標,如果沒有找到,返回-1
var person = [{
name:'a',
age:17,
},
{
name:'b',
age:18,
},
{
name:'c',
age:19,
}];
var findAdult = person.findIndex(function(val,item){
return val.age >= 18;
});
//findAdult : 1
- map 映射
//map返回在原數組基礎上修改後的數組
var arr = [1,2,3,4,5];
var newArr = arr.map(function (val,index) {
return val*2;
})
console.log(newArr);
Array.prototype.myMap = function (func) {
let len = this.length,
newArr = [];
for(let i = 0; i < len; i++){
newArr.push(func(this[i],i));//這裏需要deepclone!!!!
}
return newArr;
}
var myArr = arr.myMap(function(val, index){
return val*2;
})
console.log(myArr);
- reduce 對數組中的每個元素執行一個由您提供的reducer函數(升序執行),將其結果彙總爲單個返回值。
//reduce 從左向右迭代整個數組 做累加器 只會返回最後一個值
var arr = [1,2,3,4,5];
arr.reduce(function (preValue, val, index) { //preVal 上一次執行函數return 的值
console.log(preValue);
console.log(index+":"+val);
return val;
})//初始值,在第一次執行函數時preVal的值,如果不傳默認值,preValue會從數組的第一位開始,val從第二位開始
var sum = arr.reduce(function (preVal, val, index) {
return preVal + val;
})
console.log(sum);
Array.prototype.myReduce = function(func,init){
var preVal = init,k = 0;
if(init === undefined){
preVal = this[0];
k = 1;
}
for(k; k < this.length;k++){
preVal = func(preVal,this[k],k);
}
return preVal;
}
var mySum = arr.myReduce(function(preVal, val, index){
return preVal + val;
});
console.log(mySum);
- reduceRight 接受一個函數作爲累加器(accumulator)和數組的每個值(從右到左)將其減少爲單個值。
var arr = [1,2,3,4,5];
var sum = arr.reduceRight(function (preVal, val, index) {
console.log(index);
return preVal + val;
},0);
console.log(sum);
Array.prototype.myReduceRight = function(func,init){
var preVal = init,k = this.length-1;
if(init === undefined){
preVal = this[k];
k--;
}
for(k; k >= 0; k--){
preVal = preVal = func(preVal,this[k],k);
}
return preVal;
}
var mySum = arr.myReduceRight(function(preVal ,val,index) {
console.log(index);
return preVal + val;
},0);
console.log(mySum);