js 数组方法总结
Array數(shù)組:
length屬性
????可通過array.length增加或者減少數(shù)組的長(zhǎng)度,如;array.length=4(數(shù)組長(zhǎng)3,第四位為undefined),也可單純獲得長(zhǎng)度。array[array.length]=’’賦值。
檢測(cè)數(shù)組
檢測(cè)是否數(shù)組ES3 ?instanceof array ?ES5新增的Array.isArray(),支持的IE9+,Opera 10.5+,Chrome,Safari5+。
?
一:原數(shù)組不變 ?[,start],表示0或1個(gè)參數(shù)
concat()
無參,返回?cái)?shù)組副本;參數(shù)為數(shù)組,將兩個(gè)數(shù)組連接;不是數(shù)組,添加到結(jié)果數(shù)組末尾。在concat拷貝原數(shù)組的過程中,對(duì)象引用時(shí)會(huì)復(fù)制對(duì)象引用到組合的新數(shù)組中,原數(shù)組和新數(shù)組中的對(duì)象引用都指向同一個(gè)實(shí)際變量。所以,實(shí)際對(duì)象被修改時(shí),兩數(shù)組同時(shí)被修改。
粒:
????????????????????????????
?
includes()
ES7。返回一個(gè)布爾值,表示數(shù)組中是否包含給定的值,與字符串includes方法類似。
Includes(searchElement,fromIndex),fromIndex可選,表示開始位置,如果為負(fù)值,按升序從array.length+fromIndex索引開始搜索。
Includes()作為一個(gè)通用方法,也可以用于其他類型對(duì)象,栗子:
(function() {
??console.log([].includes.call(arguments, 'a')); // true
??console.log([].includes.call(arguments, 'd')); // false
})('a','b','c');
兼容性(IE未實(shí)現(xiàn))
?
join()
只接受一個(gè)參數(shù),分隔符的字符串,然后返回所有項(xiàng)的字符串,array.join(“||”)//1||2||3
如果參數(shù)為空,將數(shù)組中的元素直接拼接。Undefied or null 轉(zhuǎn)化為空字符串
slice()
將數(shù)組的一部分淺復(fù)制(shallow copy)存入新的數(shù)組并返回,不改變?cè)瓟?shù)組。
1參或兩參;1個(gè)參返回的是從該參數(shù)指定位置到數(shù)組末尾項(xiàng);2個(gè)參返回起始和結(jié)束位置之間項(xiàng),不包括結(jié)束位置項(xiàng)。
?
indexOf(searchElement,fromIndex)
要查找的項(xiàng),(可選)表示查找起點(diǎn)位置的索引。沒有找到返回-1,從頭開始查找;第二參數(shù)表示開始查找的位置,返回的結(jié)果依然是數(shù)組中的排位。故作用不大。
?
lastIndexOf()從尾開始查找;
toString()返回由數(shù)組中每個(gè)值得字符串形式拼接而成的一個(gè)逗號(hào)分隔的字符串,
valueOf()返回的還是數(shù)組。
toLocaleString()和前兩者差不多。
???
二、改變自身方法
arr.copyWithin(target,[,?start[,?end]])?? ??兼容問題
數(shù)組內(nèi)部替換操作,負(fù)數(shù),倒數(shù)開始
[1,?2,?3,?4,?5].copyWithin(-2);??
//?[1,?2,?3,?1,?2]?
?
[1,?2,?3,?4,?5].copyWithin(0,?3);??
//?[4,?5,?3,?4,?5]??
??
[1,?2,?3,?4,?5].copyWithin(0,?3,?4);??
//?[4,?2,?3,?4,?5]??
??
[1,?2,?3,?4,?5].copyWithin(-2,?-3,?-1);??
//?[1,?2,?3,?3,?4]?
?
array.fill(value [,statrt [, end ]])
將指定區(qū)間元素填充
[1, 2, 3].fill(4); ??????????????// [4, 4, 4]
[1, 2, 3].fill(4, 1); ???????????// [1, 4, 4]
[1, 2, 3].fill(4, 1, 2); ????????// [1, 4, 3]
[1, 2, 3].fill(4, 1, 1); ????????// [1, 2, 3]
[1, 2, 3].fill(4, -3, -2); ??????// [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN); ????// [1, 2, 3]
Array(3).fill(4); ???????????????// [4, 4, 4]
[].fill.call({ length: 3 }, 4); ?// {0: 4, 1: 4, 2: 4, length: 3}
?pop()
從數(shù)組末尾移除最后一項(xiàng),減少數(shù)組的length值,返回移除的項(xiàng)。
push()
可以接受任意數(shù)量的參數(shù),把它們逐個(gè)添加到數(shù)組的末尾,并返回修改后數(shù)組的長(zhǎng)度
reverse()
反轉(zhuǎn)數(shù)組項(xiàng)的順序
shift()
移除數(shù)組中的第一項(xiàng)并返回第一項(xiàng),數(shù)組長(zhǎng)度減1
unshift()
在數(shù)組前端添加任意個(gè)項(xiàng),并返回新數(shù)組的長(zhǎng)度
?
sort()
默認(rèn)是按升序排列數(shù)組,比較的是字符串。要想按自己想法排序,寫方法。Sort(方法名) a>b return 1,反之-1,相等 return 0
?
?splice()最強(qiáng)大的數(shù)組方法。向數(shù)組的中部插入項(xiàng)。
????1:刪除,2個(gè)參數(shù),要?jiǎng)h除的第一項(xiàng)位置和項(xiàng)數(shù),splice(0,2)刪除數(shù)組中的前兩項(xiàng)。
????2:插入,3個(gè)參數(shù),起始位置、要?jiǎng)h除的項(xiàng)數(shù)、要插入的項(xiàng)數(shù),如果是多項(xiàng),繼續(xù)傳入?yún)?shù),第4,5更多。Splice(2,0,’1’,’2’),當(dāng)前數(shù)組位置2插入字符串1,2;
3:替換,可以向指定位置插入任意數(shù)量的項(xiàng),同時(shí)刪除任意數(shù)量的項(xiàng)。用法同第二條,第二個(gè)參數(shù)不是0。
栗子:
刪除給定數(shù)組中的第二項(xiàng)和第三項(xiàng),并且在得到的新的數(shù)組中第一項(xiàng)后面添加一個(gè)新的值
var arr1 = ['a','b','c','d','e'];
var arr2 = arr1.?splice?(?1?,?2?,'newvalue');
?
?
?三、遍歷方法
forEach((v, i, a) => {})
讓數(shù)組的每一項(xiàng)都執(zhí)行一次給定的函數(shù)
v表示當(dāng)前項(xiàng)的值,i表示當(dāng)前索引,a表示數(shù)組本身
forEach遍歷的范圍在第一次調(diào)用 callback前就會(huì)確定。調(diào)用forEach后添加到數(shù)組中的項(xiàng)不會(huì)被 callback訪問到。如果已經(jīng)存在的值被改變,則傳遞給 callback的值是 forEach遍歷到他們那一刻的值。已刪除的項(xiàng)不會(huì)被遍歷到。
?
entries();
返回一個(gè)array
栗子:
var arr = ["a", "b", "c"];
var eArr = arr.entries();
console.log(eArr.next().value); // [0, "a"]
console.log(eArr.next().value); // [1, "b"]
console.log(eArr.next().value); // [2, "c"]
?
every(),對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)對(duì)每一項(xiàng)返回true,則返回true
some()是對(duì)數(shù)組中每一項(xiàng)運(yùn)行指定函數(shù),如果該函數(shù)對(duì)任一項(xiàng)返回true,則返回true
???
?filter()
使用指定的函數(shù)測(cè)試所有元素,并創(chuàng)建一個(gè)包含所有測(cè)試通過的元素的新數(shù)組
callback函數(shù)返回一個(gè)布爾值,true即通過測(cè)試
不會(huì)改變?cè)瓟?shù)組
栗子1
function traverse(){//輸出所有頁面寬度和高度大于50像素的節(jié)點(diǎn)
????return Array.prototype.filter.call(document.querySelectorAll('body *'),?function(node){
????????return node.offsetWidth > 50 && node.offsetHeight > 50;
????});
}
栗子2
var a1 = ['a', 10, 'b', 20, 'c', 30];var a2 = a1.filter(function(item) {
????return typeof item == 'number';
});console.log(a2); // logs 10,20,30
?
find()
查詢到第一個(gè)符合條件的就返回?????????????IE不支持
?
???
keys() ???????????????????????????????????IE不支持
返回一組數(shù)組索引的迭代器(類似于entries)
var arr = ['a', , 'c'];
var sparseKeys = Object.keys(arr);
var denseKeys = [...arr.keys()];
console.log(sparseKeys); // ['0', '2']
console.log(denseKeys); ?// [0, 1, 2]
?
array.map((v, i, a) => {}) ??????????????????????IE9+
返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組
map 不修改調(diào)用它的原數(shù)組本身(當(dāng)然可以在 callback 執(zhí)行時(shí)改變?cè)瓟?shù)組)
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3]
// numbers is still [1, 4, 9]
?
?
????
例var number = [1,2,3,4,5,4,3,2,1];
???Var everyResult = number.every(function(item,index,array){
//函數(shù)
})
Alert(everyResult);
?
reduce(),reduceRight() (反方向) ???????????????????IE9+
對(duì)數(shù)組中的所有元素調(diào)用指定的回調(diào)函數(shù)。該回調(diào)函數(shù)的返回值為累積結(jié)果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時(shí)作為參數(shù)提供。
從第一項(xiàng)開始,接收四個(gè)參數(shù):例
Var values = [1,2,3,4,5];
Var sum = values.reduce(function(prev, cur, index, array){
Return prev + cur;
});
?
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
??function(a, b) {
????return a.concat(b);
??},
??[]);// flattened is [0, 1, 2, 3, 4, 5]
?
?
Array.prototype.slice.call
真實(shí)數(shù)組具有slice方法,可以對(duì)數(shù)組進(jìn)行淺復(fù)制(不影響原數(shù)組),返回的依然是數(shù)組。類似數(shù)組雖然有length屬性,可以使用for循環(huán)遍歷,卻不能直接使用slice方法,會(huì)報(bào)錯(cuò)!但是通過Array.prototype.slice.call則不會(huì)報(bào)錯(cuò),本身(類似數(shù)組)被從頭到尾slice復(fù)制了一遍——變成了真實(shí)數(shù)組!
將類似數(shù)組的對(duì)象(比如arguments)轉(zhuǎn)換為真實(shí)的數(shù)組
?
Array.prototype.slice.call(arguments)
轉(zhuǎn)載于:https://www.cnblogs.com/jasonUED/p/6745412.html
總結(jié)
- 上一篇: yum 安装mariadb
- 下一篇: 老蒋的 用WDCP 搭建