push() 可以接受一個(gè)或者多個(gè)參數(shù)俘侠,將參數(shù)追加到數(shù)組的尾部购撼,返回添加后的數(shù)組的長(zhǎng)度,原數(shù)組會(huì)發(fā)生改變匕累。
pop() 從數(shù)組尾部刪除一個(gè)元素陵刹,返回這個(gè)被刪除的元素,原數(shù)組發(fā)生改變欢嘿。
unshift() 可以接受一個(gè)或者多個(gè)參數(shù)衰琐,將參數(shù)放到數(shù)組的頭部也糊,返回添加后的數(shù)組的長(zhǎng)度,原數(shù)組會(huì)發(fā)生改變羡宙。
shift() 從數(shù)組頭部刪除一個(gè)元素狸剃,返回這個(gè)被刪除的元素,原數(shù)組發(fā)生改變狗热。
slice() 截取類 如果不傳參數(shù)钞馁,會(huì)返回原數(shù)組;如果一個(gè)參數(shù)匿刮,從該參數(shù)表示的索引開始截取僧凰,直至數(shù)組結(jié)束,返回這個(gè)截取數(shù)組僻焚,原數(shù)組不變允悦;兩個(gè)參數(shù),從第一個(gè)參數(shù)對(duì)應(yīng)的索引開始截取虑啤,到第二個(gè)參數(shù)對(duì)應(yīng)的索引結(jié)束隙弛,但不包括第二個(gè)參數(shù)對(duì)應(yīng)的索引上值,原數(shù)組不改變狞山;最多接受兩個(gè)參數(shù)全闷。
splice() 截取類 沒有參數(shù),返回空數(shù)組萍启,原數(shù)組不變总珠;一個(gè)參數(shù),從該參數(shù)表示的索引位開始截取勘纯,直至數(shù)組結(jié)束局服,返回截取的 數(shù)組,原數(shù)組改變驳遵;兩個(gè)參數(shù)淫奔,第一個(gè)參數(shù)表示開始截取的索引位,第二個(gè)參數(shù)表示截取的長(zhǎng)度堤结,返回截取的 數(shù)組唆迁,原數(shù)組改變;三個(gè)或者更多參數(shù)竞穷,第三個(gè)及以后的參數(shù)表示要從截取位插入的值唐责。
reverse() 不接受參數(shù),數(shù)組翻轉(zhuǎn)瘾带。
sort()排序鼠哥。
arr.sort(function(a,b){? ? ? ? ? ? ? ??
????return a-b; //從小到大排序
? ? return b-a; //從大到小排序? ? ? ? ??
});?
join()參數(shù)來拼接;分隔符。
concat()將參數(shù)放入原數(shù)組后返回肴盏,原數(shù)組本身不變科盛,如果參數(shù)是數(shù)組,將值提出來菜皂。
isArray()判斷是否是數(shù)組。
toString()數(shù)組轉(zhuǎn)字符串厉萝。
ES5新增的數(shù)組方法2個(gè)索引方法:indexOf() 和 lastIndexOf()恍飘;
indexOf()從前往后遍歷,返回item在數(shù)組中的索引位谴垫,如果沒有返回-1章母;通常用來判斷數(shù)組中有沒有某個(gè)元素◆婕簦可以接收兩個(gè)參數(shù)乳怎,第一個(gè)參數(shù)是要查找的項(xiàng),第二個(gè)參數(shù)是查找起點(diǎn)位置的索引前弯。lastIndexOf()與indexOf一樣蚪缀,區(qū)別是從后往前找。
5個(gè)迭代方法:forEach()恕出、map()询枚、filter()、some()浙巫、every()金蜀;
forEach()forEach方法與map方法很相似,也是對(duì)數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)的畴。但是渊抄,forEach方法不返回值,只用來操作數(shù)據(jù)丧裁。這就是說护桦,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法渣慕,否則使用forEach方法嘶炭;forEach的用法與map方法一致,參數(shù)是一個(gè)函數(shù)逊桦,該函數(shù)同樣接受三個(gè)參數(shù):當(dāng)前值眨猎、當(dāng)前位置、整個(gè)數(shù)組强经。map()將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)睡陪,然后把每一次的執(zhí)行結(jié)果組成一個(gè)新數(shù)組返回;map方法接受一個(gè)函數(shù)作為參數(shù)。該函數(shù)調(diào)用時(shí)兰迫,map方法向它傳入三個(gè)參數(shù):當(dāng)前成員信殊、當(dāng)前位置和數(shù)組本身。
filter()用于過濾數(shù)組成員汁果,滿足條件的成員組成一個(gè)新數(shù)組返回涡拘;它的參數(shù)是一個(gè)函數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù)据德,返回結(jié)果為true的成員組成一個(gè)新數(shù)組返回鳄乏。該方法不會(huì)改變?cè)瓟?shù)組;可以接受三個(gè)參數(shù):當(dāng)前成員棘利,當(dāng)前位置和整個(gè)數(shù)組橱野。
some()該方法對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)任何一項(xiàng)返回 true善玫,則返回true水援。(some方法會(huì)在數(shù)組中任一項(xiàng)執(zhí)行函數(shù)返回true之后,不在進(jìn)行循環(huán)茅郎。)
every()該方法對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)蜗元,如果該函數(shù)對(duì)每一項(xiàng)都返回 true,則返回true只洒。2個(gè)歸并方法:reduce()许帐、reduceRight();reduce()依次處理數(shù)組的每個(gè)成員毕谴,最終累計(jì)為一個(gè)值成畦。reduce是從左到右處理(從第一個(gè)成員到最后一個(gè)成員)。參數(shù)是一個(gè)函數(shù),該函數(shù)接受以下兩個(gè)參數(shù):1累積變量涝开,默認(rèn)為數(shù)組的第一個(gè)成員循帐;2當(dāng)前變量,默認(rèn)為數(shù)組的第二個(gè)成員舀武。reduceRight()從右往左拄养。
ES6新增的數(shù)組方法Array.from()用于類似數(shù)組的對(duì)象(即有l(wèi)ength屬性的對(duì)象)和可遍歷對(duì)象轉(zhuǎn)為真正的數(shù)組。
let json ={? ? '0':'hello',? ? '1':'123',? ? '2':'panda',? ? length:3 }?
let arr = Array.from(json); console.log(arr);
//打右铡:["hello", "123", "panda"]
Array.of()將一組值轉(zhuǎn)變?yōu)閿?shù)組瘪匿。
let arr1 = Array.of('你好','hello');?
console.log(arr1); //["你好", "hello"]
find()和findIndex()用于找出第一個(gè)符合條件的數(shù)組成員。參數(shù)是個(gè)回調(diào)函數(shù)寻馏,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)棋弥,直到找到第一個(gè)返回值為true的成員,然后返回該成員诚欠。如果沒有符合條件的成員顽染,就返回undefined漾岳;可以接收3個(gè)參數(shù),依次為當(dāng)前值粉寞、當(dāng)前位置尼荆、原數(shù)組。fill()使用fill()方法給定值填充數(shù)組唧垦。
如:new Array(3).fill(7); //[7,7,7]
可以接收第二個(gè)和第三個(gè)參數(shù)捅儒,用于指定填充的起始位置和結(jié)束位置(不包括結(jié)束位置)。
let arr3 = [0,1,2,3,4,5,6,7];?
arr3.fill('error',2,3);?
console.log(arr3); //[0,1,"error",3,4,5,6,7]
遍歷數(shù)組的方法:entries()业崖、values()野芒、keys()這三個(gè)方法都是返回一個(gè)遍歷器對(duì)象,可用for...of循環(huán)遍歷双炕,唯一區(qū)別:keys()是對(duì)鍵名的遍歷、values()對(duì)鍵值的遍歷撮抓、entries()是對(duì)鍵值對(duì)的遍歷妇斤。
for(let item of ['a','b'].keys()){? ??
????consloe.log(item);? ? //0? ? //1
}
for(let item of ['a','b'].values()){? ??
????consloe.log(item);? ? //'a'? ? //'b'
}
let arr4 = [0,1];
for(let item of arr4.entries()){? ??
????console.log(item);? ? //? [0, 0]? ? //? [1, 1]
}
如果不用for...of進(jìn)行遍歷,可用使用next()方法手動(dòng)跳到下一個(gè)值丹拯。
let arr5 =['a','b','c']
let entries = arr5.entries();
console.log(entries.next().value); //[0, "a"]
console.log(entries.next().value); //[1, "b"]
console.log(entries.next().value);//[2,"c"]
console.log(entries.next().value); //undefined
copyWithin()在數(shù)組內(nèi)部站超,將指定位置的成員復(fù)制到其他位置(會(huì)覆蓋原有成員),改變?cè)瓟?shù)組乖酬。該函數(shù)有三個(gè)參數(shù)死相。target:目的起始位置。start:復(fù)制源的起始位置(從0開始)咬像,可以省略算撮,可以是負(fù)數(shù)。end:復(fù)制源的結(jié)束位置县昂,可以省略肮柜,可以是負(fù)數(shù),實(shí)際結(jié)束位置是end-1倒彰。
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
arr1.copyWithin(1, 3, 6); //把第3個(gè)元素(從0開始)到第5個(gè)元素审洞,復(fù)制并覆蓋到以第1個(gè)位置開始的地方。
console.log('%s', JSON.stringify(arr1)) //[1,4,5,6,5,6,7,8,9,10,11]
start和end都是可以省略待讳。start省略表示從0開始芒澜,end省略表示數(shù)組的長(zhǎng)度值。目標(biāo)的位置不夠的创淡,能覆蓋多少就覆蓋多少痴晦。
const arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr2.copyWithin(3)
console.log('%s', JSON.stringify(arr2)) //[1,2,3,1,2,3,4,5,6,7,8]
start和end都可以是負(fù)數(shù),負(fù)數(shù)表示從右邊數(shù)過來第幾個(gè)(從-1開始)辩昆。start小于end阅酪,兩者為負(fù)數(shù)時(shí)也是旨袒。
const arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr3.copyWithin(3, -3, -2)
console.log('%s', JSON.stringify(arr3))
end永遠(yuǎn)大于end(取值必須是start右邊的),end小于start(取start左邊的值)時(shí)會(huì)返回原數(shù)組术辐。
ES7新增的數(shù)組方法includes()表示某個(gè)數(shù)組是否包含給定的值砚尽,如果包含則返回 true,否則返回false辉词”毓拢可以接收兩個(gè)參數(shù):要搜索的值和搜索的開始索引。當(dāng)?shù)诙€(gè)參數(shù)被傳入時(shí)瑞躺,該方法會(huì)從索引處開始往后搜索(默認(rèn)索引值為0)敷搪。若搜索值在數(shù)組中存在則返回true,否則返回false幢哨。
['a', 'b', 'c', 'd'].includes('b')? ? ? // true
['a', 'b', 'c', 'd'].includes('b', 1)? ? // true
['a', 'b', 'c', 'd'].includes('b', 2)? ? // false
數(shù)組迭代方法的重寫
下文中出現(xiàn)的深拷貝函數(shù)deepClone
forEach重寫
/** * forEach循環(huán) :
* 第一個(gè)參數(shù)是回調(diào)函數(shù) 回調(diào)函數(shù)的參數(shù)為( 元素,下標(biāo),當(dāng)前數(shù)組 )
* 第二個(gè)參數(shù)要修改的this指向 *
* arr.forEach( function(item,index,array){?
????console.log(this.name)
????console.log(item,index,array)
} , obj) */
filter方法重寫
* 重寫思路:
? ? ? ? 首先filter會(huì)返回一個(gè)新數(shù)組 所以需要?jiǎng)?chuàng)建一個(gè)新數(shù)組去接收
? ? ? ? 根據(jù)用戶的條件判斷返回的true和false去判斷要不要添加到新數(shù)組中
every重寫
· 首先every最終返回了一個(gè)布爾值,只有當(dāng)我們傳入的函數(shù)中所返回的值都為true才會(huì)返回true只要有一個(gè)返回false那么就返回false
map方法
*? 思路和forEach差不多
*? Map方法需要return 會(huì)返回一個(gè)新數(shù)組
*? 如果沒有return返回一個(gè)都是undefined的數(shù)組且和forEach循環(huán)操作一樣