摘要:它的參數(shù)是一個回調(diào)函數(shù)參數(shù)依次為當(dāng)前的值當(dāng)前的位置和原數(shù)組,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為的成員,然后返回該成員。
分為兩種:原型(實(shí)例)方法和靜態(tài)函數(shù) 第一類:原型方法:
棧方法(后進(jìn)先出)
push
參數(shù):任意個
作用:將任意數(shù)量的參數(shù)逐個添加到數(shù)組尾部
返回值: 新數(shù)組的長度
影響:破壞了原數(shù)組
pop
參數(shù):無
作用:刪除數(shù)組最后一項(xiàng)
返回值:刪除的項(xiàng)
影響:破壞了原數(shù)組
隊(duì)列方法(先進(jìn)先出)
unshift
參數(shù):任意個
作用:將任意個參數(shù)逐個添加到數(shù)組前端
返回值:新數(shù)組的長度
影響:破壞了原數(shù)組
shift
參數(shù):無
作用:刪除數(shù)組第一項(xiàng)
返回值:刪除的項(xiàng)
影響:破壞了原數(shù)組
重排序方法
reverse
參數(shù):無
作用:反轉(zhuǎn)數(shù)組
返回值:排序后的數(shù)組
影響:破壞了原數(shù)組
sort
1)不推薦使用默認(rèn)排序方法
2)接受一個比較函數(shù)作為參數(shù),
3)比較函數(shù)接受兩個參數(shù),如果第一個參數(shù)位于第二個參數(shù)之前則返回一個負(fù)數(shù),如兩個參數(shù)相等則返回0,若第一個參數(shù)位于第二個參數(shù)之后則返回一個正數(shù)
4)比較數(shù)值數(shù)組的比較函數(shù)
function ascendingCompare(num1, num2) { return num1 - num2; } function descendingCompare(num1, num2) { return num2 - num1; } var arr = [1 , 2, 3]; console.log(arr.sort(ascendingCompare) // [1,2,3] console.log(arr.sort(descendingCompare) // [3,2,1]
5)根據(jù)對象數(shù)組里的對象的某個指定屬性的比較函數(shù)(閉包)
function compare(propertyName) { return function (object1, object2) { return object1[propertyName] - object2[propertyName] } } var arr [{name: "子虛", age: 12}, {name: "烏有", age: 13}] console.log(arr.sort(compare(age)) // {name: "子虛", age: 12}, {name: "烏有", age: 13}]
6)返回值:排序后的數(shù)組
7)影響:破壞了原數(shù)組
操作方法
concat
1)先創(chuàng)建當(dāng)前數(shù)組的一個副本,然后將接收到的參數(shù)添加到這個副本的尾部,最后返回這個副本
2)如果參數(shù)是一個或多個數(shù)組,這該方法會將這些數(shù)組中的每一項(xiàng)都添加到結(jié)果數(shù)組中
3)如果參數(shù)不是數(shù)組,這些值會被簡單的添加到結(jié)果數(shù)組的末尾
4)如果不傳參數(shù),它只是復(fù)制數(shù)組并返回副本(可用于復(fù)制數(shù)組)
5)不會破壞原數(shù)組
join
1) 將數(shù)組中的所有元素拼接成一個字符串并返回
2)可以在join傳遞一個字符串作為參數(shù),該參數(shù)表示連接的方式
3)不會破壞原數(shù)組
slice
1)從當(dāng)前數(shù)組中取出一個或多個指定的連續(xù)的元素創(chuàng)建數(shù)組并返回
2)當(dāng)只有一個參數(shù)時,該方法從該參數(shù)位置開始到當(dāng)前數(shù)組的所有項(xiàng)
3)當(dāng)有兩個參數(shù)時,該方法返回起始和結(jié)束位置之間的項(xiàng),但不包括結(jié)束位置的項(xiàng)
4)當(dāng)參數(shù)中有負(fù)數(shù)的時候,用數(shù)組長度加上該數(shù)來確定相應(yīng)的位置
5)不會破壞原數(shù)組
splice
1)刪除數(shù)組中的指定的連續(xù)的元素,也可向數(shù)組的中部插入項(xiàng)
2)刪除:提供兩個參數(shù):刪除第一項(xiàng)的起始位置,刪除的個數(shù)
3)插入:提供三個參數(shù):起始位置,0(刪除的項(xiàng)數(shù)),要插入的項(xiàng)
4)編輯:提供三個參數(shù):起始位置,刪除的項(xiàng)數(shù),要添加的項(xiàng)(刪除的項(xiàng)數(shù)不一定要等于添加的項(xiàng)數(shù))
5)返回從原始數(shù)組刪除的項(xiàng)組成的數(shù)組
6)破壞了原數(shù)組
以下為es6新增
位置方法
indexOf和lastIndexOf:
1)這兩個方法都接受兩個參數(shù):要查找的項(xiàng)和(可選的)起始位置,
2)indexOf從數(shù)組開頭向后查找,lastIndexOf從數(shù)組末尾向前查找
3)返回查找的項(xiàng)在數(shù)組中的位置,或者在沒找到的情況下返回-1
4)使用全等操作符 (NaN不等于NaN)
遍歷
forEach
1)對數(shù)組每一項(xiàng)運(yùn)行給定函數(shù)作為參數(shù)
2)該函數(shù)分別接受三個參數(shù):數(shù)組元素,數(shù)組索引(可選),數(shù)組本身(可選)
3)無返回值
4)缺點(diǎn):無法像for循環(huán)那樣用break語句提前終止遍歷
映射
map
1)對數(shù)組每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
2)該函數(shù)分別接受三個參數(shù):數(shù)組元素,數(shù)組索引(可選),數(shù)組本身(可選)
過濾
filter
1)對數(shù)組每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會返回true的項(xiàng)組成的數(shù)組
2)該函數(shù)分別接受三個參數(shù):數(shù)組元素,數(shù)組索引(可選),數(shù)組本身(可選)
檢測
every和some
1)它們對數(shù)組元素應(yīng)用指定的函數(shù)進(jìn)行判定,返回true或false
2)every就像數(shù)學(xué)中的“針對所有”的量詞?,當(dāng)前僅當(dāng)數(shù)組中的每一項(xiàng)調(diào)用指定函數(shù)都返回true,它才返回true
3)some就像數(shù)學(xué)中的“存在”的量詞ョ,只要數(shù)組中有一項(xiàng)調(diào)用指定函數(shù)返回true,它就返回true
4)一旦every和some確認(rèn)返回值就會停止遍歷
5)根據(jù)數(shù)學(xué)上的慣例,空數(shù)組調(diào)用every返回true,some返回false
歸納
reduce和reduceRight
1)使用指定的函數(shù)對數(shù)組元素進(jìn)行組合,生成單個值,這在函數(shù)式編程中是常見操作,也可成為“注入”和“折疊”
2)reduce第一個參數(shù)是執(zhí)行簡化操作的化簡函數(shù),化簡函數(shù)的任務(wù)是用某種方法把兩個值組合或化簡為一個值,并返回化簡后的值,第二個參數(shù)(可選)是作為化簡函數(shù)的第一個參數(shù)的初始值,如果不傳就取數(shù)組的第一項(xiàng)
3)化簡函數(shù)的第一個參數(shù)是到目前為止的化簡操作累計(jì)的結(jié)果,第2-4個參數(shù)分別是數(shù)組元素、數(shù)組索引和數(shù)組本身
4)reduceRight類似于reduce,不同的是它是從右往左處理
const a = [1,2,3,4,5] const sum = a.reduce(function(x,y){return x+y}, 0) // 數(shù)組求和 const max = a.reduce(function(x,y){return (x>y)?x:y}) // 數(shù)組求最大值
includes
1)參數(shù):要檢測的元素
2)作用:檢測某個數(shù)組是否包含給定的元素
3)返回值:布爾值
4)使用不一樣的判斷算法
[NaN].includes(NaN) // true
fill
1)參數(shù):參數(shù)1用來填充數(shù)組的元素,參數(shù)2填充數(shù)組的起始位置(可選),參數(shù)3填充數(shù)組的結(jié)束位置(可選,不包括結(jié)束位置)
["a", "b", "c"].fill(7, 1) // ["a", 7, 7]
2)返回值:新數(shù)組
3)破壞了原數(shù)組
4)如果填充的類型為對象,那么被賦值的是同一個內(nèi)存地址的對象,而不是深拷貝對象
let arr = new Array(3).fill({name: "Mike"}); // [{name: "Mike"}, {name: "Mike"}, {name: "Mike"}] arr[0].name = "Ben"; // [{name: "Ben"}, {name: "Ben"}, {name: "Ben"}]
find和findIndex
1)find方法,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調(diào)函數(shù)(參數(shù)依次為當(dāng)前的值、當(dāng)前的位置和原數(shù)組),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為true的成員,然后返回該成員。如果沒有符合條件的成員,則返回undefined
2)findIndex方法的用法與find方法非常類似,返回第一個符合條件的數(shù)組成員的位置,如果所有成員都不符合條件,則返回-1
3)這兩個方法都可以接受第二個參數(shù),用來綁定回調(diào)函數(shù)的this對象
4)這兩個方法都可以發(fā)現(xiàn)NaN,彌補(bǔ)了數(shù)組的indexOf方法的不足
[NaN].indexOf(NaN) // -1 [NaN].findIndex(y => Object.is(NaN, y)) // 0第二類:靜態(tài)函數(shù):
Array.of()
1)誕生原因:Array()構(gòu)造器有一個總所周知的陷阱,就是只傳一個參數(shù),且這個參數(shù)是數(shù)字的話,那么不會構(gòu)造出一個值為這個數(shù)字的單元素的數(shù)組,而是一個空數(shù)組,其length屬性為這個數(shù)字;
2)Array.of總是返回參數(shù)值組成的數(shù)組。如果沒有參數(shù),就返回一個空數(shù)組。
Array.from()
1)用于將兩類對象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對象(arguments, nodelist)和可遍歷(iterable)的對象(Set ,Map, 字符串)
var arrLike = { length: 4, 2: "foo", } Array.from(arrLike) // [undefined, undefined, "foo", undefined]
2)第一個參數(shù)是要轉(zhuǎn)換的數(shù)據(jù),第二個是可選參數(shù),是一個映射回調(diào)函數(shù),作用類似于數(shù)組的map方法,用來對每個元素進(jìn)行處理,將處理后的值放入返回的數(shù)組,還可以傳第三個可選參數(shù),用于指定第二個參數(shù)回調(diào)函數(shù)的this
var arrLike = { length: 4, 2: "foo", } Array.from(arrLike, item => item || 0) // [0, 0 , "foo", 0]
參考資料:《黃皮書》《紅皮書第三版》《犀牛書》《阮大神es6》
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/95342.html
摘要:數(shù)組的構(gòu)造函數(shù)由于數(shù)組的構(gòu)造函數(shù)在處理參數(shù)時的不確定性,因此強(qiáng)烈建議使用符號來創(chuàng)建一個新數(shù)組。總結(jié)綜上所述,我們應(yīng)該盡量使用來創(chuàng)建新函數(shù),而不是數(shù)組的構(gòu)造函數(shù),這樣代碼將有更好的可讀性。 數(shù)組的構(gòu)造函數(shù) 由于數(shù)組的構(gòu)造函數(shù)在處理參數(shù)時的不確定性,因此強(qiáng)烈建議使用 [] 符號來創(chuàng)建一個新數(shù)組。 [1, 2, 3]; // Result: [1, 2, 3] new Array(1, ...
摘要:創(chuàng)建數(shù)組的基本方式有兩種。為數(shù)組專門提供了和方法,以便實(shí)現(xiàn)類似棧的行為。反轉(zhuǎn)數(shù)組,按升序排列數(shù)組項(xiàng)即最小的值位于最前面。例如,會刪除數(shù)組中的前兩項(xiàng)。對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回該函數(shù)會返回的項(xiàng)組成的數(shù)組。 ===什么是數(shù)組=== 數(shù)組是數(shù)據(jù)的有序列表。創(chuàng)建數(shù)組的基本方式有兩種。第一種是使用 Array 構(gòu)造函數(shù):var colors = new Array();創(chuàng)建數(shù)組的第二種基...
摘要:接觸這么多年,第一次總結(jié)一下它的遍歷語法。而且你必須借助特定的結(jié)構(gòu)才能遍歷數(shù)據(jù)結(jié)構(gòu)。它的作用是遍歷對象的鍵名。建議僅在遍歷數(shù)組的時候使用。另一個優(yōu)點(diǎn)是,它可以遍歷任何部署了接口的數(shù)據(jù)結(jié)構(gòu),甚至是非的數(shù)據(jù)類型,即自己定義的數(shù)據(jù)結(jié)構(gòu)。 接觸JavaScript這么多年,第一次總結(jié)一下它的遍歷語法。以前我大部分時間都在老版本的JavaScript下寫代碼,所以大部分時間都是用for...in...
摘要:中的算法附道面試常見算法題解決方法和思路關(guān)注每日一道面試題詳解面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程技能和文化契合度。值得記住的數(shù)組方法有和。一個好的解決方案是使用內(nèi)置的方法。 JavaScript中的算法(附10道面試常見算法題解決方法和思路) 關(guān)注github每日一道面試題詳解 Introduction 面試過程通常從最初的電話面試開始,然后是現(xiàn)場面試,檢查編程...
摘要:然而,不會在年的基礎(chǔ)上加,而只是表示年。閉包這是一個經(jīng)典的面試題雖然期望輸出,然而實(shí)際上卻不會。因?yàn)榈谛械臎]有在正確的環(huán)境下執(zhí)行。 譯者按: 漫漫編程路,總有一些坑讓你淚流滿面。 原文: Who said javascript was easy ? 譯者: Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。 這里我們針對JavaScri...
閱讀 953·2021-11-24 09:39
閱讀 2689·2021-09-26 09:55
閱讀 14155·2021-08-23 09:47
閱讀 3577·2019-08-30 15:52
閱讀 849·2019-08-29 13:49
閱讀 997·2019-08-23 18:00
閱讀 844·2019-08-23 16:42
閱讀 1635·2019-08-23 14:28