數(shù)組對(duì)象原生方法
copyWithin 扯饶、fill 恒削、pop池颈、push、sort钓丰、reverse躯砰、shift、unshift携丁、splice琢歇、concat、includes 梦鉴、join李茫、slice、toString肥橙、indexOf魄宏、lastIndexOf、forEach存筏、entries 宠互、every、some椭坚、filter予跌、find、findIndex善茎、keys匕得、values、map巾表、reduce、reduceRight
修改器方法
下面的這些方法會(huì)改變調(diào)用它們的對(duì)象自身的值
copyWithin 這是一個(gè)實(shí)驗(yàn)性的API略吨,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個(gè)位置集币,并返回它,不會(huì)改變?cè)瓟?shù)組的長(zhǎng)度
/**
* arr.copyWithin(target[, start[, end]])
* @param target
* 0 為基底的索引翠忠,復(fù)制序列到該位置鞠苟。如果是負(fù)數(shù),target 將從末尾開始計(jì)算
* 如果 target 大于等于 arr.length秽之,將會(huì)不發(fā)生拷貝当娱。如果 target 在 start 之后,復(fù)制的序列將被修改以符合 arr.length
* @param start
* 0 為基底的索引考榨,開始復(fù)制元素的起始位置跨细。如果是負(fù)數(shù),start 將從末尾開始計(jì)算
* 如果 start 被忽略河质,copyWithin 將會(huì)從0開始復(fù)制
* @param end
* 0 為基底的索引冀惭,開始復(fù)制元素的結(jié)束位置震叙。copyWithin 將會(huì)拷貝到該位置,但不包括 end 這個(gè)位置的元素散休。如果是負(fù)數(shù)媒楼, end 將從末尾開始計(jì)算
* 如果 end 被忽略,copyWithin 方法將會(huì)一直復(fù)制至數(shù)組結(jié)尾(默認(rèn)為 arr.length)
* @returns [](改變后的數(shù)組)
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.copyWithin(0, 4, 5)) //[2, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
console.log(arr.copyWithin(1, 4)) //[3, 2, 7, 4, 6, 8, 9, 1, 8, 9, 1]
fill 這是一個(gè)實(shí)驗(yàn)性的API戚丸,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素划址,不包括終止索引
/**
* arr.fill(value[, start[, end]])
* @param value
* 用來填充數(shù)組元素的值
* @param start
* 起始索引,默認(rèn)值為0
* @param end
* 終止索引限府,默認(rèn)值為 this.length
* @returns [](修改后的數(shù)組)
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.fill(0, 2, 4)) // [3, 5, 0, 0, 2, 7, 4, 6, 8, 9, 1]
console.log(arr.fill(5, 1)) // [3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
console.log(arr.fill(6)) // [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
pop
從數(shù)組中刪除最后一個(gè)元素夺颤,并返回該元素的值,此方法更改數(shù)組的長(zhǎng)度
/**
* arr.pop()
* @returns 從數(shù)組中刪除的元素(當(dāng)數(shù)組為空時(shí)返回undefined)
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.pop()) // 1
console.log(arr) // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9]
push
將一個(gè)或多個(gè)元素添加到數(shù)組的末尾谣殊,并返回該數(shù)組的新長(zhǎng)度
/**
* arr.push(element1, ..., elementN)
* @param elementN
* 被添加到數(shù)組末尾的元素
* @returns 當(dāng)調(diào)用該方法時(shí)拂共,新的 length 屬性值將被返回
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.push(7)) // 12
console.log(arr) // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7]
console.log(arr.push(5, 8, 3)) // 15
console.log(arr) // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 5, 8, 3]
sort
用原地算法對(duì)數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組姻几。默認(rèn)排序順序是在將元素轉(zhuǎn)換為字符串宜狐,然后比較它們的UTF-16代碼單元值序列時(shí)構(gòu)建的。由于它取決于具體實(shí)現(xiàn)蛇捌,因此無法保證排序的時(shí)間和空間復(fù)雜性
/**
* arr.sort([compareFunction])
* @param compareFunction (可選)
* 用來指定按某種順序進(jìn)行排列的函數(shù)抚恒。如果省略,元素按照轉(zhuǎn)換為的字符串的各個(gè)字符的Unicode位點(diǎn)進(jìn)行排序
* firstEl 第一個(gè)用于比較的元素
* secondEl 第二個(gè)用于比較的元素
* @returns 排序后的數(shù)組络拌。請(qǐng)注意俭驮,數(shù)組已原地排序,并且不進(jìn)行復(fù)制
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.sort()) // [0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9]
reverse
將數(shù)組中元素的位置顛倒春贸,并返回該數(shù)組混萝,該方法會(huì)改變?cè)瓟?shù)組
/**
* arr.reverse()
* @returns 顛倒后的數(shù)組
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.reverse()) // [1, 9, 8, 6, 4, 7, 2, 3, 0, 5, 3]
shift
從數(shù)組中刪除第一個(gè)元素,并返回該元素的值萍恕,此方法更改數(shù)組的長(zhǎng)度
/**
* arr.shift()
* @returns 從數(shù)組中刪除的元素; 如果數(shù)組為空則返回undefined
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.shift()) // 3
console.log(arr) // [5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
unshift
將一個(gè)或多個(gè)元素添加到數(shù)組的開頭逸嘀,并返回該數(shù)組的新長(zhǎng)度,該方法修改原有數(shù)組
/**
* arr.unshift(element1, ..., elementN)
* @param elementN
* 要添加到數(shù)組開頭的元素或多個(gè)元素
* @returns 當(dāng)一個(gè)對(duì)象調(diào)用該方法時(shí)允粤,返回其 length 屬性值
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.unshift(4, 5)) // 13
console.log(arr) // [4, 5, 3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
splice
刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容崭倘,此方法會(huì)改變?cè)瓟?shù)組
/**
* array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
* @param start?
* 指定修改的開始位置(從0計(jì)數(shù))。如果超出了數(shù)組的長(zhǎng)度类垫,則從數(shù)組末尾開始添加內(nèi)容司光;
* 如果是負(fù)值,則表示從數(shù)組末位開始的第幾位(從-1計(jì)數(shù)悉患,這意味著-n是倒數(shù)第n個(gè)元素并且等價(jià)于array.length-n)残家;
* 如果負(fù)數(shù)的絕對(duì)值大于數(shù)組的長(zhǎng)度,則表示開始位置為第0位
* deleteCount (可選)
* 整數(shù)售躁,表示要移除的數(shù)組元素的個(gè)數(shù)
* 如果 deleteCount 大于 start 之后的元素的總數(shù)跪削,則從 start 后面的元素都將被刪除(含第 start 位)
* 如果 deleteCount 被省略了谴仙,或者它的值大于等于array.length - start(也就是說,如果它大于或者等于start之后的所有元素的數(shù)量)碾盐,那么start之后數(shù)組的所有元素都會(huì)被刪除
* 如果 deleteCount 是 0 或者負(fù)數(shù)晃跺,則不移除元素。這種情況下毫玖,至少應(yīng)添加一個(gè)新元素
* item1, item2, ... (可選)
* 要添加進(jìn)數(shù)組的元素,從start 位置開始掀虎。如果不指定,則 splice() 將只刪除數(shù)組元素
* @returns 由被刪除的元素組成的一個(gè)數(shù)組付枫。如果只刪除了一個(gè)元素烹玉,則返回只包含一個(gè)元素的數(shù)組。如果沒有刪除元素阐滩,則返回空數(shù)組
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.splice(1, 0, 8)) // []
console.log(arr) // [3, 8, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
console.log(arr.splice(4, 2, 7, 2)) // [3, 2]
console.log(arr) // [3, 8, 5, 0, 7, 2, 7, 4, 6, 8, 9, 1]
訪問方法
下面的這些方法絕對(duì)不會(huì)改變調(diào)用它們的對(duì)象的值二打,只會(huì)返回一個(gè)新的數(shù)組或者返回一個(gè)其它的期望值
concat
用于合并兩個(gè)或多個(gè)數(shù)組。此方法不會(huì)更改現(xiàn)有數(shù)組掂榔,而是返回一個(gè)新數(shù)組
/**
* var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
* @param valueN (可選)
* 數(shù)組和/或值继效,將被合并到一個(gè)新的數(shù)組中。如果省略了所有 valueN 參數(shù)装获,則 concat 會(huì)返回調(diào)用此方法的現(xiàn)存數(shù)組的一個(gè)淺拷貝
* @returns 新的 Array 實(shí)例
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const tempArr = [7, 3, 8, 5]
const tempNewArr = arr.concat(tempArr)
const newArray = arr.concat([7, 3, 8, 5])
console.log(tempNewArr) // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 3, 8, 5]
console.log(newArray) // [3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1, 7, 3, 8, 5]
includes 這是一個(gè)實(shí)驗(yàn)性的API瑞信,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況穴豫,如果包含則返回 true凡简,否則返回false
/**
* arr.includes(valueToFind[, fromIndex])
* @param valueToFind
* 需要查找的元素值
* @param fromIndex (可選)
* 從fromIndex 索引處開始查找 valueToFind。
* 如果為負(fù)值精肃,則按升序從 array.length + fromIndex 的索引開始搜
* (即使從末尾開始往前跳 fromIndex 的絕對(duì)值個(gè)索引秤涩,然后往后搜尋),默認(rèn)為 0
* @returns 返回一個(gè)布爾值 Boolean 司抱,如果在數(shù)組中找到了(如果傳入了 fromIndex 筐眷,表示在 fromIndex 指定的索引范圍中找到了)則返回 true
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.includes(2)) // true
console.log(arr.includes(11)) // false
join
將一個(gè)數(shù)組(或一個(gè)類數(shù)組對(duì)象)的所有元素連接成一個(gè)字符串并返回這個(gè)字符串。如果數(shù)組只有一個(gè)項(xiàng)目状植,那么將返回該項(xiàng)目而不使用分隔符
/**
* arr.join([separator])
* @param separator (可選)
* 指定一個(gè)字符串來分隔數(shù)組的每個(gè)元素。
* 如果需要怨喘,將分隔符轉(zhuǎn)換為字符串津畸。
* 如果缺省該值,數(shù)組元素用逗號(hào)(,)分隔必怜。
* 如果separator是空字符串("")肉拓,則所有元素之間都沒有任何字符
* @returns 返回一個(gè)布爾值 Boolean ,如果在數(shù)組中找到了(如果傳入了 fromIndex 梳庆,表示在 fromIndex 指定的索引范圍中找到了)則返回 true
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.join()) // 3,5,0,3,2,7,4,6,8,9,1
console.log(arr.join('')) // 35032746891
console.log(arr.join('-')) // 3-5-0-3-2-7-4-6-8-9-1
slice
返回一個(gè)新的數(shù)組對(duì)象暖途,這一對(duì)象是一個(gè)由 begin 和 end 決定的原數(shù)組的淺拷貝(包括 begin卑惜,不包括end),原始數(shù)組不會(huì)被改變
/**
* arr.slice([begin[, end]])
* @param begin (可選)
* 提取起始處的索引(從 0 開始)驻售,從該索引開始提取原數(shù)組元素露久。
* 如果該參數(shù)為負(fù)數(shù),則表示從原數(shù)組中的倒數(shù)第幾個(gè)元素開始提取欺栗,slice(-2) 表示提取原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(包含最后一個(gè)元素)毫痕。
* 如果省略 begin,則 slice 從索引 0 開始迟几。
* 如果 begin 大于原數(shù)組的長(zhǎng)度消请,則會(huì)返回空數(shù)組
* @param end (可選)
* 提取終止處的索引(從 0 開始),在該索引處結(jié)束提取原數(shù)組元素类腮。slice 會(huì)提取原數(shù)組中索引從 begin 到 end 的所有元素(包含 begin臊泰,但不包含 end
* slice(1,4) 會(huì)提取原數(shù)組中從第二個(gè)元素開始一直到第四個(gè)元素的所有元素 (索引為 1, 2, 3的元素)
* 如果該參數(shù)為負(fù)數(shù), 則它表示在原數(shù)組中的倒數(shù)第幾個(gè)元素結(jié)束抽取蚜枢。
* slice(-2,-1) 表示抽取了原數(shù)組中的倒數(shù)第二個(gè)元素到最后一個(gè)元素(不包含最后一個(gè)元素缸逃,也就是只有倒數(shù)第二個(gè)元素)
* 如果 end 被省略,則 slice 會(huì)一直提取到原數(shù)組末尾
* 如果 end 大于數(shù)組的長(zhǎng)度祟偷,slice 也會(huì)一直提取到原數(shù)組末尾
* @returns 一個(gè)含有被提取元素的新數(shù)組
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.slice(2)) // [0, 3, 2, 7, 4, 6, 8, 9, 1]
console.log(arr.slice(2, 4)) // [0, 3]
console.log(arr.slice(1, 15)) // [5, 0, 3, 2, 7, 4, 6, 8, 9, 1]
toString
返回一個(gè)字符串察滑,表示指定的數(shù)組及其元素
/**
* arr.toString()
* @returns 一個(gè)表示指定的數(shù)組及其元素的字符串
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.toString()) // 3,5,0,3,2,7,4,6,8,9,1
indexOf
返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在修肠,則返回-1
/**
* arr.indexOf(searchElement[, fromIndex])
* @param searchElement
* 要查找的元素
* @param fromIndex (可選)
* 開始查找的位置贺辰。
* 如果該索引值大于或等于數(shù)組長(zhǎng)度,意味著不會(huì)在數(shù)組里查找嵌施,返回-1饲化。
* 如果參數(shù)中提供的索引值是一個(gè)負(fù)值,則將其作為數(shù)組末尾的一個(gè)抵消吗伤,即-1表示從最后一個(gè)元素開始查找吃靠,-2表示從倒數(shù)第二個(gè)元素開始查找 ,以此類推足淆。
* 注意:
* 如果參數(shù)中提供的索引值是一個(gè)負(fù)值巢块,并不改變其查找順序,查找順序仍然是從前向后查詢數(shù)組巧号。
* 如果抵消后的索引值仍小于0族奢,則整個(gè)數(shù)組都將會(huì)被查詢。其默認(rèn)值為0
* @returns 首個(gè)被找到的元素在數(shù)組中的索引位置; 若沒有找到則返回 -1
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.indexOf(2)) // 4
console.log(arr.indexOf(10)) // -1
lastIndexOf
返回指定元素(也即有效的 JavaScript 值或變量)在數(shù)組中的最后一個(gè)的索引丹鸿,如果不存在則返回 -1越走。從數(shù)組的后面向前查找,從 fromIndex 處開始
/**
* arr.lastIndexOf(searchElement[, fromIndex])
* @param searchElement
* 要查找的元素
* @param fromIndex (可選)
* 從此位置開始逆向查找。默認(rèn)為數(shù)組的長(zhǎng)度減 1(arr.length - 1)廊敌,即整個(gè)數(shù)組都被查找铜跑。
* 如果該值大于或等于數(shù)組的長(zhǎng)度,則整個(gè)數(shù)組會(huì)被查找骡澈。
* 如果為負(fù)值锅纺,將其視為從數(shù)組末尾向前的偏移。
* 即使該值為負(fù)秧廉,數(shù)組仍然會(huì)被從后向前查找伞广。
* 如果該值為負(fù)時(shí),其絕對(duì)值大于數(shù)組長(zhǎng)度疼电,則方法返回 -1嚼锄,即數(shù)組不會(huì)被查找
* @returns 數(shù)組中該元素最后一次出現(xiàn)的索引,如未找到返回-1
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.lastIndexOf(3)) // 3
console.log(arr.lastIndexOf(10)) // -1
迭代方法
在下面的眾多遍歷方法中蔽豺,有很多方法都需要指定一個(gè)回調(diào)函數(shù)作為參數(shù)区丑。在每一個(gè)數(shù)組元素都分別執(zhí)行完回調(diào)函數(shù)之前,數(shù)組的length屬性會(huì)被緩存在某個(gè)地方修陡,所以沧侥,如果你在回調(diào)函數(shù)中為當(dāng)前數(shù)組添加了新的元素,那么那些新添加的元素是不會(huì)被遍歷到的魄鸦。此外宴杀,如果在回調(diào)函數(shù)中對(duì)當(dāng)前數(shù)組進(jìn)行了其它修改,比如改變某個(gè)元素的值或者刪掉某個(gè)元素拾因,那么隨后的遍歷操作可能會(huì)受到未預(yù)期的影響旺罢。總之绢记,不要嘗試在遍歷過程中對(duì)原數(shù)組進(jìn)行任何修改扁达,雖然規(guī)范對(duì)這樣的操作進(jìn)行了詳細(xì)的定義,但為了可讀性和可維護(hù)性蠢熄,請(qǐng)不要這樣做
forEach
方法對(duì)數(shù)組的每個(gè)元素執(zhí)行一次給定的函數(shù)
/**
* arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
* @param callback
* 為數(shù)組中每個(gè)元素執(zhí)行的函數(shù)跪解,該函數(shù)接收一至三個(gè)參數(shù):
* currentValue 數(shù)組中正在處理的當(dāng)前元素
* index(可選) 數(shù)組中正在處理的當(dāng)前元素的索引
* array(可選) forEach() 方法正在操作的數(shù)組
* @param thisArg(可選)
* 可選參數(shù)。當(dāng)執(zhí)行回調(diào)函數(shù) callback 時(shí)签孔,用作 this 的值
* @returns undefined
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
arr.forEach(element => console.log(element))
// 3
// 5
// 0
// 3
// 2
// 7
// 4
// 6
// 8
// 9
// 1
entries 這是一個(gè)實(shí)驗(yàn)性的API叉讥,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
返回一個(gè)新的Array Iterator對(duì)象,該對(duì)象包含數(shù)組中每個(gè)索引的鍵/值對(duì)
/**
* arr.entries()
* @returns
* 一個(gè)新的 Array 迭代器對(duì)象饥追。Array Iterator是對(duì)象图仓,
* 它的原型(__proto__:Array Iterator)上有一個(gè)next方法,可用用于遍歷迭代器取得原數(shù)組的[key,value]
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const iterator1 = arr.entries();
console.log(iterator1.next().value) // [0, 3]
console.log(iterator1.next().value) // [1, 5]
console.log(iterator1.next().value) // [2, 0]
every
測(cè)試一個(gè)數(shù)組內(nèi)的所有元素是否都能通過某個(gè)指定函數(shù)的測(cè)試判耕,它返回一個(gè)布爾值
/**
* arr.every(callback(element[, index[, array]])[, thisArg])
* @param callback
* 用來測(cè)試每個(gè)元素的函數(shù)透绩,它可以接收三個(gè)參數(shù):
* element 用于測(cè)試的當(dāng)前值
* index(可選) 用于測(cè)試的當(dāng)前值的索引
* array(可選) 調(diào)用 every 的當(dāng)前數(shù)組
* @param thisArg(可選)
* 執(zhí)行 callback 時(shí)使用的 this 值
* @returns 如果回調(diào)函數(shù)的每一次返回都為 truthy 值翘骂,返回 true 壁熄,否則返回 false
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.every(value => value < 10)) // true
console.log(arr.every(value => value / 2 === 0)) // false
some
測(cè)試數(shù)組中是不是至少有1個(gè)元素通過了被提供的函數(shù)測(cè)試帚豪。它返回的是一個(gè)Boolean類型的值
/**
* arr.some(callback(element[, index[, array]])[, thisArg])
* @param callback
* 用來測(cè)試每個(gè)元素的函數(shù),接受三個(gè)參數(shù):
* element 數(shù)組中正在處理的元素
* index (可選) 數(shù)組中正在處理的元素的索引值
* array (可選) some()被調(diào)用的數(shù)組
* @param thisArg(可選)
* 執(zhí)行 callback 時(shí)使用的 this 值
* @returns 數(shù)組中有至少一個(gè)元素通過回調(diào)函數(shù)的測(cè)試就會(huì)返回true草丧;所有元素都沒有通過回調(diào)函數(shù)的測(cè)試返回值才會(huì)為false
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
console.log(arr.some(value => value > 8)) // true
console.log(arr.some(value => value / 2 === 0)) // true
console.log(arr.some(value => value <-1)) // false
filter
創(chuàng)建一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素
/**
* var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
* @param callback
* 用來測(cè)試數(shù)組的每個(gè)元素的函數(shù)狸臣。返回 true 表示該元素通過測(cè)試,保留該元素昌执,false 則不保留,它接受以下三個(gè)參數(shù):
* element 數(shù)組中當(dāng)前正在處理的元素
* index (可選) 正在處理的元素在數(shù)組中的索引
* array (可選) 調(diào)用了 filter 的數(shù)組本身
* @param thisArg(可選)
* 執(zhí)行 callback 時(shí)烛亦,用于 this 的值
* @returns 一個(gè)新的、由通過測(cè)試的元素組成的數(shù)組懂拾,如果沒有任何數(shù)組元素通過測(cè)試煤禽,則返回空數(shù)組
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const result = arr.filter(value => value % 2 === 0)
console.log(result) // [0, 2, 4, 6, 8]
find這是一個(gè)實(shí)驗(yàn)性的API,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值岖赋。否則返回 undefined
/**
* arr.find(callback[, thisArg])
* @param callback
* 在數(shù)組每一項(xiàng)上執(zhí)行的函數(shù)檬果,接收 3 個(gè)參數(shù):
* element 當(dāng)前遍歷到的元素
* index (可選) 當(dāng)前遍歷到的索引
* array (可選) 數(shù)組本身
* @param thisArg(可選)
* 執(zhí)行回調(diào)時(shí)用作this 的對(duì)象
* @returns 數(shù)組中第一個(gè)滿足所提供測(cè)試函數(shù)的元素的值,否則返回 undefined
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const result = arr.find(value => value > 5)
console.log(result) // 7
findIndex這是一個(gè)實(shí)驗(yàn)性的API唐断,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引选脊。若沒有找到對(duì)應(yīng)元素則返回-1
/**
* arr.findIndex(callback[, thisArg])
* @param callback
* 針對(duì)數(shù)組中的每個(gè)元素, 都會(huì)執(zhí)行該回調(diào)函數(shù), 執(zhí)行時(shí)會(huì)自動(dòng)傳入下面三個(gè)參數(shù):
* element 當(dāng)前元素
* index (可選) 當(dāng)前元素的索引
* array (可選) 調(diào)用findIndex的數(shù)組
* @param thisArg(可選)
* 執(zhí)行callback時(shí)作為this對(duì)象的值.
* @returns 數(shù)組中通過提供測(cè)試函數(shù)的第一個(gè)元素的索引。否則脸甘,返回-1
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const result = arr.findIndex(value => value > 5)
console.log(result) // 5
keys 這是一個(gè)實(shí)驗(yàn)性的API恳啥,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
返回一個(gè)包含數(shù)組中每個(gè)索引鍵的Array Iterator對(duì)象
/**
* arr.keys()
* @returns 一個(gè)新的 Array 迭代器對(duì)象
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const iterator = arr.keys();
for (const key of iterator) {
console.log(key);
}
// 3
// 5
// 0
// 3
// 2
// 7
// 4
// 6
// 8
// 9
// 1
values 這是一個(gè)實(shí)驗(yàn)性的API,請(qǐng)盡量不要在生產(chǎn)環(huán)境中使用它
返回一個(gè)新的 Array Iterator 對(duì)象丹诀,該對(duì)象包含數(shù)組每個(gè)索引的值
/**
* arr.values()
* @returns 一個(gè)新的 Array 迭代對(duì)象
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const iterator = arr.values();
for (const values of iterator) {
console.log(values);
}
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 10
map
創(chuàng)建一個(gè)新數(shù)組钝的,其結(jié)果是該數(shù)組中的每個(gè)元素是調(diào)用一次提供的函數(shù)后的返回值
/**
* var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])
* @param callback
* 生成新數(shù)組元素的函數(shù),使用三個(gè)參數(shù):
* currentValue callback 數(shù)組中正在處理的當(dāng)前元素
* index (可選) callback 數(shù)組中正在處理的當(dāng)前元素的索引
* array (可選) map 方法調(diào)用的數(shù)組
* @param thisArg(可選)
* 執(zhí)行 callback 函數(shù)時(shí)值被用作this
* @returns 一個(gè)由原數(shù)組每個(gè)元素執(zhí)行回調(diào)函數(shù)的結(jié)果組成的新數(shù)組
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const result = arr.map(value => value * 2)
console.log(result) // [6, 10, 0, 6, 4, 14, 8, 12, 16, 18, 2]
reduce
對(duì)數(shù)組中的每個(gè)元素執(zhí)行一個(gè)由您提供的reducer函數(shù)(升序執(zhí)行)忿墅,將其結(jié)果匯總為單個(gè)返回值
/**
* arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
* @param callback
* 執(zhí)行數(shù)組中每個(gè)值 (如果沒有提供 initialValue則第一個(gè)值除外)的函數(shù)扁藕,包含四個(gè)參數(shù):
* accumulator 累計(jì)器累計(jì)回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時(shí)返回的累積值,或initialValue(見于下方)
* currentValue 數(shù)組中正在處理的元素
* index (可選) 數(shù)組中正在處理的當(dāng)前元素的索引疚脐。 如果提供了initialValue亿柑,則起始索引號(hào)為0,否則從索引1起始
* array (可選) 調(diào)用reduce()的數(shù)組
* @param initialValue(可選)
* 作為第一次調(diào)用 callback函數(shù)時(shí)的第一個(gè)參數(shù)的值棍弄。
* 如果沒有提供初始值望薄,則將使用數(shù)組中的第一個(gè)元素。
* 在沒有初始值的空數(shù)組上調(diào)用 reduce 將報(bào)錯(cuò)
* @returns 函數(shù)累計(jì)處理的結(jié)果
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const reducer = (accumulator, currentValue) => accumulator + currentValue;
console.log(arr.reduce(reducer)) // 48
console.log(arr.reduce(reducer, 10)) // 58
reduceRight
接受一個(gè)函數(shù)作為累加器(accumulator)和數(shù)組的每個(gè)值(從右到左)將其減少為單個(gè)值
/**
* arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
* @param callback
* 一個(gè)回調(diào)函數(shù)呼畸,用于操作數(shù)組中的每個(gè)元素痕支,它可接受四個(gè)參數(shù):
* accumulator
* 累加器:
* 上一次調(diào)用回調(diào)函數(shù)時(shí),回調(diào)函數(shù)返回的值蛮原。
* 首次調(diào)用回調(diào)函數(shù)時(shí)卧须,如果 initialValue 存在,累加器即為 initialValue,
* 否則須為數(shù)組中的最后一個(gè)元素(詳見下方 initialValue 處相關(guān)說明)
* currentValue 當(dāng)前元素:當(dāng)前被處理的元素
* index (可選) 數(shù)組中當(dāng)前被處理的元素的索引
* array (可選) 調(diào)用 reduceRight() 的數(shù)組
* @param initialValue(可選)
* 首次調(diào)用 callback 函數(shù)時(shí)花嘶,累加器 accumulator 的值笋籽。
* 如果未提供該初始值,則將使用數(shù)組中的最后一個(gè)元素椭员,并跳過該元素车海。
* 如果不給出初始值,則需保證數(shù)組不為空隘击。
* 否則侍芝,在空數(shù)組上調(diào)用 reduce 或 reduceRight 且未提供初始值
* (例如 [].reduce( (acc, cur, idx, arr) => {} ) )的話,
* 會(huì)導(dǎo)致類型錯(cuò)誤 TypeError: reduce of empty array with no initial value)
* @returns 執(zhí)行之后的返回值
**/
const arr = [3, 5, 0, 3, 2, 7, 4 , 6, 8, 9, 1]
const temp = [9, 8]
const result = [arr, temp].reduceRight((accumulator, currentValue) => accumulator.concat(currentValue))
console.log(result) // [9, 8, 3, 5, 0, 3, 2, 7, 4, 6, 8, 9, 1]