靜態方法
Array.isArray(obj);
檢測給定值是否為數組; 是則返回 true | 否則返回 false
console.log(Array.isArray([]));/* true */
console.log(Array.isArray(new Array(1,2)));/* true */
console.log(Array.isArray({}));/* false */
對操作數組本身進行修改的方法
- pop 刪除并返回數組的最后一個元素
- push 向末尾添加一個或多個元素,并返回新的長度
- shift 刪除并返回數據的第一個元素
- splice 刪除元素,并向數組添加元素
- unshift 向開頭添加一個或多個元素,并返回新的長度
- reverse 顛倒數組中元素的順序
- sort 排序
- fill 用指定值來填充數組
對操作數組本身 無影響
- concat 連接兩個或多個數組,并返回結果
- join 將數組的所有元素放入一個字符串中,元素按指定的分隔符進行連接
- slice 從已有的數組返回選定的元素
- map 返回調用處理方法后的數組值
- forEach 遍歷數組所有值,并將值逐一傳給回調函數
- filter 返回一個新數組,新數組中為符合條件的所有值
- find 返回符合條件的第一個值
- findIndex 返回符合條件第一個值得下標索引
- indexOf 返回指定值在數組中首次出現的位置
- includes 數組是否包含指定值
- every 遍歷數組,檢測是否所有值都符合給定的函數判斷;全部符合返回true
- some 遍歷數組,檢測是否有符合給定函數的判斷;有一個符合則返回true
對數組本身進行修改的方法
pop
刪除數組中的最后一個元素,并返回刪除的元素
let arr = [1,2,'a',{b:2}];
console.log(arr);
/* [ 1, 2, 'a', { b: 2 } ] */
console.log(arr.pop());
/* { b: 2 } */
console.log(arr);
/* [ 1, 2, 'a' ] */
push
向數組末尾添加一個或多個元素,并返回新的長度
let arr = [1,2];
let arrb = ['a','b'];
console.log(arr);
/* [ 1, 2 ] */
console.log(arr.push(...arrb));
/* length:4 */
console.log(arr);
/* [ 1, 2, 'a', 'b' ] */
arrb[0]='c';
console.log(arr);
/* [ 1, 2, 'a', 'b' ] */
console.log(arrb);
/* [ 'c', 'b' ] */
shift
刪除數組中的第一個元素,并返回刪除的元素
let arr = [{a:1},2,3];
console.log(arr.shift());
/* {a:1} */
console.log(arr);
/* [2,3] */
unshift
向數組的頭部增加一個或多個元素,并返回數組新的長度
let arr = [{a:1},2,3];
let arrb = ['c',{name:'dan'}];
console.log(arr.unshift(...arrb));
/* length:5 */
console.log(arr);
/* [ 'c', { name: 'dan' }, { a: 1 }, 2, 3 ] */
splice
向數組指定位置刪除指定個數元素 或 添加元素,并返回刪除元素的數組
- index : 操作的起始位置
- howmany : 刪除的個數 0:不刪除 | 不傳:刪除至數組末尾
- newItem,*,newItems : 新增的元素
let arr = [1,2,3,4,5];
/*從數組第二位新增兩個元素,注:純新增必須設置第二個參數為 0*/
arr.splice(2,0,{a:1},234);
console.log(arr);
/* [ 1, 2, { a: 1 }, 234, 3, 4, 5 ] */
reverse
顛倒數組的前后順序,并返回顛倒排序后的數組
let arr = [1,2,3,4,5];
console.log(arr);
/* [ 1, 2, 3, 4, 5 ] */
arr.reverse();
console.log(arr);
/* [ 5, 4, 3, 2, 1 ] */
sort
對數組進行排序 | 無參時 按字符編碼順序升序排序 | 有參:如下
- before 前一個元素
- next 后一個元素
升序條件如下
- 如果 before 小于 next,在排序后的數組中 before 應該出現在 next 之前,則返回一個小于 0 的值
- 如果 before 等于 next,返回 0
- 如果 before 大于 next,在排序后的數組中 before 應該出現在 next 之后,則返回一個大于 0 的值
降序條件如下
- 如果 before 小于 next,在排序后的數組中 before 應該出現在 next 之后,則返回一個大于 0 的值
- 如果 before 等于 next,返回 0
- 如果 before 大于 next,在排序后的數組中 before 應該出現在 next 之前,則返回一個小于 0 的值
let arr = [{name:'a',age:23},{name:'g',age:32},{name:'d',age:2},{name:'z',age:99},{name:'j',age:13},{name:'e',age:78},{name:'p',age:34},{name:'e',age:33}];
function sortBy(attr,ascORdesc = 'asc'){
let ascORdescFlag = (ascORdesc== 'asc'?1:-1);
return function sort(before,next){
before = before[attr];
next = next[attr];
if(before<next){
return -1*ascORdescFlag;
}
if(before>next){
return 1*ascORdescFlag;
}
return 0;
};
}
arr.sort(sortBy('age',22));
console.log(arr);
/*
[ { name: 'z', age: 99 },
{ name: 'e', age: 78 },
{ name: 'p', age: 34 },
{ name: 'e', age: 33 },
{ name: 'g', age: 32 },
{ name: 'a', age: 23 },
{ name: 'j', age: 13 },
{ name: 'd', age: 2 } ]
*/
arr.sort(sortBy('name'));
console.log(arr);
/*
[ { name: 'a', age: 23 },
{ name: 'd', age: 2 },
{ name: 'e', age: 78 },
{ name: 'e', age: 33 },
{ name: 'g', age: 32 },
{ name: 'j', age: 13 },
{ name: 'p', age: 34 },
{ name: 'z', age: 99 } ]
*/
fill
將指定的值 替換到 數組中的指定位置
- value: 必填|填充的值
- start: 可選|填充的起始位置
- end: 可選|填充的結束位置
let arr = ['d','b','c',1,3];
arr.fill('hello',3,5);
console.log(arr);
/* [ 'd', 'b', 'c', 'hello', 'hello' ] */
arr.fill('world',2);
console.log(arr);
/* [ 'd', 'b', 'world', 'world', 'world' ] */
arr.fill('hello world');
console.log(arr);
/*
[ 'hello world',
'hello world',
'hello world',
'hello world',
'hello world' ]
*/
對數組本身無影響的方法
concat
連接兩個或多個數組
let arr = [1,{age:28},3],arrb=['a','b'],arrc = [];
arrc = arrc.concat(arr,arrb);
console.log(arrc);
/* [ 1, { age: 28 }, 3, 'a', 'b' ] */
arr[0] = 'hello world';
arr[1].age = 18;
console.log(arrc);
/*
注意: 原數組中,引用類型的值修改會造成返回的新數組值修改 [引用的為同一地址]
[ 1, { age: 18 }, 3, 'a', 'b' ]
*/
join
將數組中得所有元素連接成字符串
- separator 連接各元素的分隔符;若不指定,默認為逗號連接
let arr = [-1,'a',['b','c',['d','e']],'123a'];
console.log(arr.join());
/* -1,a,b,c,d,e,123a */
console.log(arr.join(''));
/* -1ab,c,d,e123a */
/*打平嵌套數組
* 注:處理后,如元素組中的元素 為String類型的數字,處理后為Number類型
*/
function unwind(array){
return arr.join(',').split(',').map((item)=>{return Number(item)?Number(item):item});
}
console.log(unwind(arr));
/* [ -1, 'a', 'b', 'c', 'd', 'e', 123 ] */
slice
返回數組中指定的元素
- start | [起始下標] -1 為數組最后的元素
- end | [結束下標]
let arr = [1,'b',{c:'hello'},'d'];
let arrb = arr.slice(-1),arrc = arr.slice();
console.log(arrb);
/* [ 'd' ] */
console.log(arrc);
/* [ 1, 'b', { c: 'hello' }, 'd' ] */
map
返回一個新數組,新元素為 原元素調用函數處理后的值
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
let arr = [1,3,'4','b',{c:'hello'}];
let arrb = arr.map(function(item){
return item*2;
});
console.log(arr);
/* [ 1, 3, '4', 'b', { c: 'hello' } ] */
console.log(arrb);
/* [ 2, 6, 8, NaN, NaN ] */
forEach
遍歷數組的每個元素,并將元素傳遞給回調函數
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
/*
*數組去重
*此方法僅可用于基礎類型的值 去重,引用類型無法去除
*/
function uniq(array){
let returnArr = [],tmpMap = {};
array.forEach((item)=>{
if(!tmpMap[item]){
returnArr.push(item);
tmpMap[item] = 1;
}
});
return returnArr;
}
let testArr = [1,1,2,2,2,3,3,3,3,'a','a','b','c',{d:'123'},{d:'456'}];
console.log(uniq(testArr));
/* [ 1, 2, 3, 'a', 'b', 'c', { d: '123' } ] */
filter
返回一個新數組,新數組中的元素為符合判斷條件的元素
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
/* 數組去重
*此方法僅可用于基礎類型的值 去重,引用類型無法去除
*/
let testArr = [1,1,2,2,2,3,3,3,3,'a','a','b','c'];
let reArr = testArr.filter((item,i,arr)=>{
return arr.indexOf(item)===i;
});
console.log(reArr);
/* [ 1, 2, 3, 'a', 'b', 'c' ] */
find
返回符合條件的 第一個值
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
let testArr = [{age:11},{age:22},{age:33}];
let reArr = testArr.find((item,i,arr)=>{
return item.age>15;
});
console.log(reArr);
/* { age: 22 } */
findIndex
返回符合條件的 第一個值的下標索引
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
let testArr = [{age:11},{age:22},{age:33}];
let reArr = testArr.find((item,i,arr)=>{
return item.age>15;
});
console.log(reArr);
/* 1 */
indexOf
返回指定元素值的第一個下標索引
- item | 待檢索的值
- start | 檢索的起始位置
/* 數組去重
*此方法僅可用于基礎類型的值 去重,引用類型無法去除
*/
let testArr = [1,1,2,2,2,3,3,3,3,'a','a','b','c'];
let reArr = testArr.filter((item,i,arr)=>{
return arr.indexOf(item)===i;
});
console.log(reArr);
/* [ 1, 2, 3, 'a', 'b', 'c' ] */
lastIndexOf
返回指定元素值的第一個下標索引
- item | 待檢索的值
let testArr = [1,1,2,2,2,3,3,3,3,'a','a','b','c'];
console.log(testArr.lastIndexOf('a'));
/* 10 */
includes
檢測數組中是否包含指定元素,有則true | 否則false
- item | 待檢測的值
- start | 檢索的起始位置
let testArr = [11,22,33];
console.log(testArr.includes(22));
/* true */
every
檢測是否數組中的元素都符合指定的條件,都符合則返回true | 一旦有一個不符合返回 false
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
let testArr = [{age:11},{age:22},{age:33}];
let reArr = testArr.every((item,i,arr)=>{
return item.age>15;
});
console.log(reArr);
/* false */
some
檢測數組中是否有一個滿足條件的元素,只要有一個則返回true | 一個都沒有則返回 false
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
let testArr = [{age:11},{age:22},{age:33}];
let reArr = testArr.some((item,i,arr)=>{
return item.age>15;
});
console.log(reArr);
/* true */
reduce
將數組中的每個值從左到右開始縮減,經函數處理后,最終返回一個值
- function
- total 初始值, 或者計算結束后的返回值 | 必須
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
- 可選。傳遞給函數的初始值
/*打平嵌套數組
* 使用條件僅為 待打平的數組為 二維數組
*/
let testArr = [1,['a','c'],3];
console.log(testArr.reduce((r,item)=>r.concat(item),[]));
/* [ 1, 'a', 'c', 3 ] */
/* 注:不提供默認值時:初始的默認值為 首位元素的值*/
reduceRight
將數組中的每個值從右到左開始縮減,經函數處理后,最終返回一個值
- function
- total 初始值, 或者計算結束后的返回值 | 必須
- currentValue: 當前值[原數組] | 必須
- index: 當前值的下標索引 | 可選
- arr: 原數組對象 | 可選
- 可選。傳遞給函數的初始值
let testArr = [1,2,3,4,5,6];
console.log(testArr.reduce((total,item)=>{
return total-item;
}));
/* 注:不提供默認值時:初始的默認值為 末位元素的值*/
/* -19 */