JS中數(shù)組對(duì)象有原生方法

數(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]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埋同,一起剝皮案震驚了整個(gè)濱河市州叠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凶赁,老刑警劉巖留量,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哟冬,居然都是意外死亡楼熄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門浩峡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來可岂,“玉大人,你說我怎么就攤上這事翰灾÷拼猓” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵纸淮,是天一觀的道長(zhǎng)平斩。 經(jīng)常有香客問我,道長(zhǎng)咽块,這世上最難降的妖魔是什么绘面? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮侈沪,結(jié)果婚禮上揭璃,老公的妹妹穿的比我還像新娘。我一直安慰自己亭罪,他們只是感情好瘦馍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著应役,像睡著了一般情组。 火紅的嫁衣襯著肌膚如雪燥筷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天院崇,我揣著相機(jī)與錄音荆责,去河邊找鬼。 笑死亚脆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盲泛。 我是一名探鬼主播濒持,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寺滚!你這毒婦竟也來了柑营?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤村视,失蹤者是張志新(化名)和其女友劉穎官套,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚁孔,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奶赔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杠氢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站刑。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鼻百,靈堂內(nèi)的尸體忽然破棺而出绞旅,到底是詐尸還是另有隱情,我是刑警寧澤温艇,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布因悲,位于F島的核電站,受9級(jí)特大地震影響勺爱,放射性物質(zhì)發(fā)生泄漏晃琳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一琐鲁、第九天 我趴在偏房一處隱蔽的房頂上張望蝎土。 院中可真熱鬧,春花似錦绣否、人聲如沸誊涯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暴构。三九已至跪呈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間取逾,已是汗流浹背耗绿。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砾隅,地道東北人误阻。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晴埂,于是被迫代替她去往敵國(guó)和親究反。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344