總結(jié)
A:變異方法(會(huì)改變自身)
push
pop
unshift
shift
splice
sort
reverse
這類是:增刪俐芯、排序(及反轉(zhuǎn))=>變異方法B:遍歷方法:
遍歷前會(huì)確定遍歷訪問
但是遍歷時(shí)會(huì)過濾稀疏項(xiàng)
(如內(nèi)部delete arr[i]涩澡,并不是改變遍歷訪問,只是跳過)
=> 增:不會(huì)遍歷到末尾項(xiàng)扳炬;刪:跳過划鸽,導(dǎo)致其實(shí)遍歷次數(shù)少了及皂;
forEach
filter
reduce
sort
map
some
every
- 還有一些查找嘴办,內(nèi)部實(shí)現(xiàn)也是遍歷:可以認(rèn)為是
filter 的簡化版
(實(shí)現(xiàn)特定功能)
非對(duì)象數(shù)組:indexOf/lastIndexOf/includes
支持對(duì)象數(shù)組:find/findIndex
C:復(fù)制
slice
concat/...
filter
map
一、增刪改查
1.增刪
1.棧方法(后進(jìn)后出)
push() 后增 let newArrLength=arr.push(element1, ..., elementN) ;//返回新數(shù)組長度
Array.prototype.push.apply(array1,array2);//簡化要先轉(zhuǎn)換成單個(gè)形參,這個(gè)時(shí)候就可以直接傳遞數(shù)組
//以下類似句喜,利用Array.prototype.XX.apply可以把形參為單個(gè)的预愤,可以轉(zhuǎn)化為傳數(shù)組
pop() 后刪 let deleteEle=arr.pop() ;//刪除最后一項(xiàng),并返回刪除項(xiàng)
2.隊(duì)列方法(先進(jìn)后出)
unshift() 前增 let newArrLength=arr.unshift(element1, ..., elementN);//返回新數(shù)組長度
Array.prototype.unshift.apply(array1,array2);//簡化要先轉(zhuǎn)換成單個(gè)形參咳胃,這個(gè)時(shí)候就可以直接傳遞數(shù)組
shift() 前刪 let deleteEle=arr.shift();//刪除第一項(xiàng)植康,并返回刪除項(xiàng)
3.指定位置增刪
splice() let deleteEle=arr.splice(start[,deleteCount[,item1[,item2[,...]]]]);//返回刪除項(xiàng)
//從start位置,刪除deleteCount個(gè)展懈,然后在start處插入item1...itemN
總結(jié):會(huì)修改自身销睁。刪除則返回刪除項(xiàng),增加則返回修改后的length 存崖。
push/pop冻记、unshift/shift是通用方法,因?yàn)橐蕾噇ength來操作来惧,對(duì)象必須要有l(wèi)ength屬性
2.改
1.自身復(fù)制黏貼:
copyWithin() Withi let newArr=arr.copyn(target[,start[,end]]);
//復(fù)制[start,end)左閉右開區(qū)間內(nèi)容到target為開始冗栗,覆蓋原來的值。返回新數(shù)組
//如果沒有end供搀,則復(fù)制為[start到尾部] 隅居。start和end都可以為負(fù)數(shù)
//復(fù)制黏貼是淺拷貝
2.fill對(duì)象填充:
fill() let newArr=arr.fill(value[, start[, end]]);
//用value填充索引為[start,end)左閉右開的區(qū)間,value可以是對(duì)象葛虐。返回新數(shù)組
總結(jié):會(huì)修改自身胎源,但不改變數(shù)組length。都是返回新數(shù)組屿脐,都是淺拷貝
3.查
1.項(xiàng)查找
includes let bool=arr.includes(searchElement[,fromIndex]);//返回布爾值
2.查找指定元素的索引:
indexof let index=arr.indexOf(searchElement[,fromIndex]);//返回索引值涕蚤,如果不存在,則返回-1
lastIndex let index=arr.lastIndexOf(searchElement[,fromIndex = arr.length - 1]);//返回索引的诵,逆序查找
3.查找滿足測試函數(shù) :
findIndex let index=arr.findIndex(callback(element[,index[,array]])[,thisArg]);//返回索引
find let ArrEle=arr.find(callback(element[,index[,array]])[,thisArg]);//返回項(xiàng)
總結(jié):都是查找到1個(gè)就結(jié)束
includes查找項(xiàng)是專業(yè)的万栅,可以找到NaN和稀疏數(shù)組的undefined,indexof不可以
但indexof/lastIndex可以獲得該項(xiàng)的索引
復(fù)雜查找用find/findIndex
二奢驯、迭代
1.every
測試數(shù)組中是否所有元素都通過了由提供的函數(shù)實(shí)現(xiàn)的測試都通過,返回true;如果有一個(gè)不通過,結(jié)束執(zhí)行,返回false
let bool=arr.every(callback(element[,index [,array]])[,objThis]);
//objThis作為參數(shù)1函數(shù)的this使用申钩,相當(dāng)于引入外部對(duì)象,返回布爾值
2.some
測試數(shù)組中是否至少有一個(gè)元素通過了由提供的函數(shù)實(shí)現(xiàn)的測試
let bool=arr.some(callback(element[,index [,array]])[,thisArg]);
//返回布爾值
3.filter
通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素次绘,返回子數(shù)組
let newArr=arr.filter(callback(element[,index[,array]])[,thisArg]);
//如果沒有符合條件的元素則返回空數(shù)組
4.map
舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素瘪阁,返回新的數(shù)組,自身不改變
let newArr=arr.map(callback(element[,index[,array]])[,thisArg]);
5.forEach
舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素邮偎,更新自身元素管跺,自身改變,無返回值
arr.forEach(callback(element[,index[,array]])[,thisArg]);
總結(jié):
every/some用于測試
filter用于返回舊數(shù)組滿足條件的新數(shù)組(舊數(shù)組子項(xiàng))
map用于返回舊數(shù)組映射后的新數(shù)組 //filter禾进、map都不會(huì)修改原數(shù)組
forEach用于修改自身數(shù)組
三豁跑、排序
1.reverse 反轉(zhuǎn)排序
arr.reverse();//修改自身,沒有返回值
2.sort 算法排序
arr.sort([sortby(L,R)]);
//沒有返回值泻云。如果沒有參數(shù):arr.sort();默認(rèn)情況為升序排序,按照字符編碼的順序進(jìn)行排序
sortby(L,R);//是數(shù)組元素兩兩比較 排序規(guī)則為:return true或正數(shù)艇拍,則L狐蜕,R進(jìn)行調(diào)換排序
四、歸并
數(shù)組元素兩兩比較卸夕,返回的值作為新的比較值层释,返回最終結(jié)果
1.reduce
let arrEle=arr.reduce(callback(accumulator,currentValue[,currentIndex][,array])[,initialValue]);
//initialValue為初始值
2.reduceRight
和reduce區(qū)別在于:reduce是從左到右,reduceRight是從右到左
五快集、生成新數(shù)組
√ 都可以用于數(shù)組拷貝(通常用concat或slice(0))
1.concat
用于源數(shù)組連接其它元素/數(shù)組贡羔,返回新數(shù)組
該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本
可以用于數(shù)組拷貝
let newArr=arr.concat(arrayX,arrayX,......,arrayX);//arrayX可以是具體的值个初,也可以是數(shù)組(參數(shù)數(shù)組會(huì)拉平)
eg:
var arr=[1,2,3,4,5,6,7];
var addArr=[8,[9,10]];
var newArrCopy = arr.concat(addArr,11);
console.log(newArrCopy);// [1, 2, 3, 4, 5, 6, 7, 8, Array(2), 11]
//返回新數(shù)組乖寒,淺拷貝測試
var a={
name:"張三"
}
var arr=[1,2,3,4,5,a,7];
var newArrCopy = arr.concat();
arr.pop();
arr[5].name="李四";
console.log(newArrCopy)//[1, 2, 3, 4, 5, {…}, 7]
//即arr和newArrCopy本身是淺拷貝,原數(shù)組pop不會(huì)影響新數(shù)組
//但原數(shù)組的項(xiàng)引用修改院溺,會(huì)影響新數(shù)組(淺拷貝)
2.slice
從已有的數(shù)組中返回選定的元素楣嘁。返回子數(shù)組
該方法并不會(huì)修改數(shù)組,而是返回一個(gè)子數(shù)組
可以用于數(shù)組拷貝
let newArr=arr.slice(start,end);//[start,end)左閉右開區(qū)間
//返回新數(shù)組覆获,淺拷貝測試
var a={
name:"張三"
}
var arr=[1,2,3,4,5,a,7];
var newArrCopy = arr.slice(0);//start是必選的
arr.pop();
arr[5].name="李四";
console.log(newArrCopy)//[1, 2, 3, 4, 5, {…}, 7]
//即arr和newArrCopy本身是淺拷貝马澈,原數(shù)組pop不會(huì)影響新數(shù)組
//但原數(shù)組的項(xiàng)引用修改,會(huì)影響新數(shù)組(淺拷貝)
3.filter
通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素弄息,返回子數(shù)組
let newArr=arr.filter(callback(element[,index[,array]])[,thisArg]);//如果沒有符合條件的元素則返回空數(shù)組
4.map
舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素痊班,返回新的數(shù)組
let newArr=arr.map(callback(element[,index[,array]])[,thisArg]);
總結(jié):生成新數(shù)組有這幾種方法:
1.借助已有數(shù)組 concat
2.自身數(shù)組子區(qū)域 slice
3.自身數(shù)組過濾 filter
4.自身數(shù)組加工 map
六、轉(zhuǎn)成字符串
1.join
將一個(gè)數(shù)組(或一個(gè)類數(shù)組對(duì)象)的所有元素連接成一個(gè)字符串并返回這個(gè)字符
let str=arr.join(separator);
//separator為分隔符摹量,默認(rèn)為“涤伐,”
//如果元素是對(duì)象,則會(huì)調(diào)用對(duì)象的toString()方法
2.利用數(shù)組隱式轉(zhuǎn)換為String
轉(zhuǎn)String
顯示語法:String(s); //轉(zhuǎn)換函數(shù)
隱式方式:"+"運(yùn)算符
1.Null // "null"
2.Undefined // "undefined"
3.Boolean // false為"false"缨称,true為"true"
4.Number // "對(duì)應(yīng)數(shù)字" //0,+0,-0為0
5.String //
6.Object // Object為:"[object Object]"凝果; function為:"function(){}";數(shù)組為:"數(shù)組內(nèi)容1睦尽,數(shù)組內(nèi)容2"
所以:數(shù)組轉(zhuǎn)字符串可以寫成
1.String(Arr)
2.Arr+""
七器净、偽數(shù)組
概念:有些對(duì)象是自動(dòng)生成的,鍵是數(shù)字当凡,可以類似數(shù)組的方式讀寫山害。即obj[i]
例子:arguments,DOM對(duì)象
特點(diǎn):具有l(wèi)ength屬性,不具有Array數(shù)組的方法
轉(zhuǎn)換為數(shù)組
1.Array.prototype.slice.call();//或[].slice.call()
//
2.Array.from()
//Array.from() 方法從一個(gè)類似數(shù)組或可迭代對(duì)象中創(chuàng)建一個(gè)新的數(shù)組實(shí)例
3. 利用...
4.