日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript數組方法總結

瀏覽:18日期:2023-11-15 13:11:49

說起來很搞笑,我在用 sublime 3 寫排序算法的時候,準備用 nodejs 來運行,就用 sublime 3 提供的編譯功能。但問題來了,我比較挫,寫了個死循環,然后 sublime 3 也不給輸出提示,我很疑惑的連續跑了 3 遍,過了一會電腦發熱,風扇開始叫了,我察覺到,一看進程,3 個 node 進程在狂吃內存和 cpu,我在想,這個 bug 該反饋給 sublime 3 還是 node 呢?

JavaScript數組方法總結

JavaScript 中的數組本身就很特別,不像 C 或 Java,搞了數組、list 一整套東西,JS 中的數組就完全可以當作一個棧或隊列來使用,四大操作 pop、push、shift、unshift。

我今天寫這篇博客,主要是寫一篇總結,以備以后查看,因為我發現無論數組操作多熟,時間久了都會忘記。

對于一個數組方法,我最關心的有兩個問題, 返回值是什么,會不會對原始數組造成影響 ,典型的例子就是 splice 和 slice 方法。對于那些返回原數組的函數,我們可以直接調用數組的鏈式調用,很酷( array.filter().sort().reverse() )。

我想帶著這兩個疑問,來總結下 Array 的數組方法。

Array

Array.length 是數組的長度,每個新建的數組對象都會有 length 對象,可以通過 Array.prototype 修改原型,不過數組的基本使用和操作不是今天的重點,我們來看數組方法。

一般情況下,數組方法在最后都會帶有一個 thisArg 的參數,這個參數會指定內部 this 的指向。如果參數中有回掉函數,這個回掉函數一般接受 3 個參數,value、index 和 array,分別代表當前傳入的值,當前傳入值所在的索引和當前的處理的數組。

目錄索引:

concat

這個方法可以用于數組的拼接,參數是一個或多個數組,返回的結果是拼接數組。

concat 方法將創建一個新數組,然后將調用它的對象(this 指向的對象,即原數組)中的元素以及所有參數中的數組類型的參數中的元素以及非數組類型的參數本身按照順序放入這個新數組,并返回該數組。concat 方法并不修改原數組和參數數組,而且對非數組對象同樣有效果。

返回拼接的新數組; 不修改原數組和參數數組; 參數可以是非數組。

var a1 = [1, 2, 3], a2 = [4, 5, 6], a3 = [7, 8, 9];var newarr = a1.concat(a2, a3);newarr //[1, 2, 3, 4, 5, 6, 7, 8, 9]a1 //[1, 2, 3]newarr = a1.concat(4, a3);//[1, 2, 3, 4, 7, 8, 9]newarr = a1.concat(’hello’);//[1, 2, 3, 'hello']every

every() 方法測試數組的所有元素是否都通過了指定函數的測試。

arr.every(callback) 會對每一個元素都執行 callback 方法,直到 callback 返回 false。有時候 every 方法會和 forEach 方法相比較,因為 forEach 無法停止,而 every 方法返回 flase 時可以中途停止。

若全部通過測試,函數返回值 true,中途退出,返回 false; 不對原數組產生影響。

function isBigEnough(element, index, array) { console.log(index); return (element >= 10);}var passed = [12, 5, 8, 130, 44].every(isBigEnough);// 0// 1// passed is falsepassed = [12, 54, 18, 130, 44].every(isBigEnough);// 0 1 2 3 4// passed is truefilter

filter() 方法使用指定的函數測試所有元素,并創建一個包含所有通過測試的元素的新數組。

其實這個方法就是一個過濾方法,前面那個 every 方法,只判斷不過濾,filter 會過濾掉一些不符合條件的,并返回新數組。

返回一個滿足過濾條件的新數組; 不會改變原數組。

function isBigEnough(element, index, array) { return (element >= 10);}var a1 = [19, 22, 6, 2, 44];var a2 = a1.filter(isBigEnough);a1 //[19, 22, 6, 2, 44]a2 //[19, 22, 44]forEach

forEach() 方法對數組的每個元素執行一次提供的函數(回調函數)。

函數沒有返回值,即 underfined; 不對原數組產生影響。

function logArrayElements(element, index, array) { console.log('a[' + index + '] = ' + element);}// 注意索引2被跳過了,因為在數組的這個位置沒有項var result = [2, 5, 9].forEach(logArrayElements);// a[0] = 2// a[1] = 5// a[2] = 9result //underfinedindexOf

indexOf()方法返回給定元素能找在數組中找到的第一個索引值,否則返回-1。

返回值是找到元素的索引值或 -1; 不對原數組產生影響。

var array = [1, 2, 5];array.indexOf(5); // 2array.indexOf(7); // -1 join

join() 方法將數組中的所有元素連接成一個字符串。

其實,對于 join 想到的第一個是字符串的 split 操作,這兩個經常搭配用來處理字符串。

返回拼接的字符串; 不對原數組產生影響。

var a1 = [1, 2, 3];var a2 = a1.join();a1 //[1, 2, 3]a2 //'1,2,3'a2 = a1.join('');//'123'a2 = a1.join('-');//'1-2-3'lastIndexOf

lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或變量)在數組中的最后一個的索引,如果不存在則返回 -1。從數組的后面向前查找,從 fromIndex 處開始。

其實這個就是 indexOf 的翻版。

返回找到的第一個元素的索引; 不對原數組產生影響。

var array = [2, 5, 9, 2];var index = array.lastIndexOf(2);// index is 3index = array.lastIndexOf(7);// index is -1index = array.lastIndexOf(2, 3);// index is 3index = array.lastIndexOf(2, 2);map

map() 方法返回一個由原數組中的每個元素調用一個指定方法后的返回值組成的新數組。

map reduce 這兩個函數在處理數組上一直都是一把手,帶來很大的便捷性。

返回一個經過回掉函數處理的新數組; 不對原數組產生影響。

var a1 = [1, 4, 9];var a2 = a1.map(Math.sqrt);a1 //[1, 4, 9]a2 //[1, 2, 3]reduce

reduce() 方法接收一個函數作為累加器(accumulator),數組中的每個值(從左到右)開始合并,最終為一個值。

reduce 是一個合并的過程,從左到右,直到把所有元素合并到一起,并返回最終的結果。它接受兩個參數,第一個參數是一個回掉函數,第二個參數是一個初始值,表示處理第一個元素時的前一個值。這個回掉函數接受四個參數,依次是 accumulator(上次處理的結果),currentValue(當前元素的值),index(當前元素索引),array(調用 reduce 的數組)。

返回最終合并的結果,即回掉函數的輸出,可以為字符串,對象,數組等任意結果; 不對原數組產生影響。

var getAdd = (pre, cur) => pre + cur;var a1 = [1, 2, 3];var a2 = a1.reduce(getAdd, 0);a1 //[1, 2, 3]a2 //6reduceRight

reduceRight() 方法接受一個函數作為累加器(accumulator),讓每個值(從右到左,亦即從尾到頭)縮減為一個值。(與 reduce() 的執行方向相反)

var toStr = (pre, cur) => ’’ + pre + cur;var a1 = [1, 2, 3];var a2 = a1.reduce(toStr, ’’);a2 //'123'a2 = a1.reduceRight(toStr, ’’);a2 //'321'push

push() 方法添加一個或多個元素到數組的末尾,并返回數組新的長度(length 屬性值)。

如果把數組當作棧,push pop 操作是棧進和出,而往往很多人會忽略函數執行后的返回值。

返回 push 操作執行之后數組的長度; 肯定改變。

var a1 = [1, 2, 3];var a2 = a1.push(4);a1 //[1, 2, 3, 4]a2 //4pop

pop() 方法刪除一個數組中的最后的一個元素,并且返回這個元素。

返回刪除的這個元素; 肯定改變。

var a1 = [1, 2, 3];var a2 = a1.pop();a1 //[1, 2]a2 //3unshift

unshift() 方法在數組的開頭添加一個或者多個元素,并返回數組新的 length 值。

返回 length 值; 肯定改變。

var a1 = [1, 2, 3];var a2 = a1.unshift(4);a1 //[4, 1, 2, 3]a2 //4shift

shift() 方法刪除數組的 第一個 元素,并返回這個元素。該方法會改變數組的長度。

shift 方法和 push 方法可以組成一個隊列的操作啦。

返回刪除的這個元素; 肯定改變。 reverse

reverse() 方法顛倒數組中元素的位置。第一個元素會成為最后一個,最后一個會成為第一個。

函數返回值是修改了的原數組; 原數組會修改。

var a1 = [1, 2, 3];var a2 = a1.reverse();a1 //[3, 2, 1]a1 === a2; //trueslice

slice() 方法會淺復制(shallow copy)數組的一部分到一個新的數組,并返回這個新數組。

slice 的參數包括拷貝的初識位置,結束位置(左閉右開),與 splice 有區別。由于不會改變原數組,這個數組可以用于前拷貝,比如經常看別人使用: arr.slice(0) ,表示拷貝數組。

返回淺拷貝后的新數組; 不會改變原數組。

var a1 = [1, 2, 3, 4, 5];var a2 = a1.slice(1, 3);a1 //[1, 2, 3, 4, 5]a2 //[2, 3]splice

splice() 方法用新元素替換舊元素,以此修改數組的內容。

如其名,分割,會修改原數組的內容,返回一個新數組,而且它的參數也比較多,第一個參數表示初始位置,第二個參數表示分割長度,第三個參數及以后表示分割后在分割處添加新元素。

返回分割的元素組成的數組; 會對數組進行修改,原數組會減去分割數組。

var a1 = [1, 2, 3, 4];var a2 = a1.splice(1, 2);a1 //[1, 4]a2 //[2, 3]a1 = [1, 2, 3, 4];a2 = a1.splice(1, 2, 5, 6);a1 //[1, 5, 6, 4]some

some() 方法測試數組中的某些元素是否通過了指定函數的測試。

sort

sort() 方法對數組的元素做原地的排序,并返回這個數組。 sort 排序可能是不穩定的。默認按照字符串的Unicode碼位點(code point)排序。

sort 函數用于排序,比較常用,若沒有制定排序函數,則按照 unicode 位點進行排序,而且數字會被轉成字符串,所以 ‘123’ 要排在 ‘11’ 的后面。

我們會用 sort 做一些有意思的排序,比如漢字按照拼音排序。

返回排序后的原數組; 會對數組進行修改。

var big = function(a, b){ return a - b;}var a1 = [2, 4, 77, 1];var a2 = a1.sort(big);a1 //[1, 2, 4, 77]a1 === a2; //true

localeCompare 可以對漢字進行排序,當同時出現漢字和字母的時候會有 bug:

var sort_py = function(a, b){ return a.localeCompare(b);}var a1 = ['北京', '上海', '南京', '合肥'];a1.sort(sort_py);//['北京', '合肥', '南京', '上海']toString

toString() 返回一個字符串,表示指定的數組及其元素。

顯然,這個方法和 join 方法比較一下。

返回拼接的字符串; 不會改變原數組。

var a1 = [1, 2, 3];var a2 = a1.toString();a2 //'1,2,3' ES6 中新添的數組方法

上面的這些方法都是 ES5 的,來看看 ES6 添加了哪些新方法。

copyWithin

copyWithin() 方法會淺拷貝數組的部分元素到同一數組的不同位置,且不改變數組的大小,返回該數組。

接受三個參數,分別是要拷貝到的位置 target,拷貝開始位置 start 和結束位置 end。

返回修改了的原數組; 會對數組進行修改,且是淺拷貝; 參數可負,負值時倒推,且 end 為空表示數組長度。

var a1 = [1, 2, 3, 4, 5];var a2 = a1.copyWithin(0, 2, 4);a1 //[3, 4, 3, 4, 5]a2 //[3, 4, 3, 4, 5]a1 === a2; //truefind

如果數組中某個元素滿足測試條件,find() 方法就會返回滿足條件的第一個元素,如果沒有滿足條件的元素,則返回 undefined。 MDN array.find 。

返回找到的那個元素,若未找到,返回 underfined 不對原數組產生影響。

function isBigEnough(element, index, array) { return (element >= 10);}var a1 = [8, 18, 14];var num = a1.find(isBigEnough); //18findIndex

findIndex()方法用來查找數組中某指定元素的索引, 如果找不到指定的元素, 則返回 -1。

這個方法可以參考 find 方法,只是返回值是元素的索引而非元素本身。

fill

使用 fill() 方法,可以將一個數組中指定區間的所有元素的值, 都替換成或者說填充成為某個固定的值。

fill 方法接受三個參數,第一個參數 value 表示要填充到值,后面兩個 start 和 end 表示開始和結束位置,可選,且左閉右開。

函數返回值是修改了的原數組; 可對數組產生影響。

var a1 = [1, 2, 3, 4, 5];var a2 = a1.fill(6, 1, 4);a1 //[1, 6, 6, 6, 5]a2 //[1, 6, 6, 6, 5]a1 === a2; //truekeys

數組的 keys() 方法返回一個數組索引的迭代器。

這個方法會返回一個數組索引的迭代器,迭代器在 ES6 中有特殊的用途。

函數返回一個迭代器對象; 不會改變原數組。

var arr = ['a', 'b', 'c'];var iterator = arr.keys();console.log(iterator.next()); // { value: 0, done: false }console.log(iterator.next()); // { value: 1, done: false }console.log(iterator.next()); // { value: 2, done: false }console.log(iterator.next()); // { value: undefined, done: true }entries

entries() 方法返回一個 Array Iterator 對象,該對象包含數組中每一個索引的鍵值對。

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']includes

includes() 方法用來判斷當前數組是否包含某指定的值,如果是,則返回 true,否則返回 false。

該函數接受兩個參數,第二個參數表示開始查找位置,起始位置為 0。這個方法與 indexOf 方法最大的區別不僅在于返回值一個是索引,一個是布爾值,indexOf 方法使用的是 === 來判斷,無法判斷 NaN 情況,而 includes 可以判斷。

返回 true 或 false; 不會改變原數組。

var a1 = [1, NaN];a1.indexOf(NaN);//-1a1.includes(NaN);//true

來自:http://yuren.space/blog/2017/01/15/array-function/

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美激情五月| 日韩精品成人| 另类欧美日韩国产在线| 日韩精品欧美成人高清一区二区| 蜜臀av国产精品久久久久| 一区三区视频| 一本色道精品久久一区二区三区| 国产精品7m凸凹视频分类| 亚洲a在线视频| 成人羞羞视频播放网站| 日韩精品电影| 久久久亚洲一区| 国产精品99久久精品| 首页国产精品| 精品三级久久| 国产精品日本| 日韩精品久久久久久| 国产精品一区亚洲| 国产中文字幕一区二区三区| 精品国产免费人成网站| 亚洲成人二区| 久久aⅴ国产紧身牛仔裤| 亚洲香蕉视频| 国产精品亚洲欧美日韩一区在线| 久久一区视频| 日韩精品欧美| 蜜桃一区二区三区在线| 日韩一区免费| 久久精品一本| 欧美丝袜一区| 亚洲精品中文字幕99999| 国产欧美日韩一区二区三区四区 | 免播放器亚洲| 日产欧产美韩系列久久99| 美女免费视频一区| 99精品综合| 鲁大师成人一区二区三区| 色综合视频一区二区三区日韩 | 日韩三级精品| 精品一区二区三区视频在线播放| 日韩一区二区三区在线免费观看| 欧美日韩视频| 国产精品视频一区二区三区四蜜臂 | 老牛影视一区二区三区| 青青在线精品| 毛片在线网站| 蜜桃视频在线观看一区| 你懂的国产精品永久在线| 91精品国产成人观看| 综合激情网站| 精品国产中文字幕第一页| 国产一区视频在线观看免费| 亚洲不卡视频| 日韩精品电影| 亚洲精品欧美| 日本精品影院| 欧美日韩黄网站| 99成人超碰| 国产午夜久久av| 欧美aa国产视频| 国产精品tv| 欧美精品九九| 麻豆国产精品视频| 欧美综合二区| 国产成人在线中文字幕| 亚洲少妇自拍| 久久永久免费| 美女尤物久久精品| 黑森林国产精品av| 日韩黄色在线观看| 五月综合激情| 精品久久电影| 日本不卡一区二区| 欧美a级一区| 91成人在线| 午夜欧美理论片| 成人在线免费观看91| 亚洲另类视频| 不卡在线一区二区| 精品久久久中文字幕| 亚州精品视频| 欧美一区二区性| 狂野欧美性猛交xxxx| 中文字幕成人| 欧美精品羞羞答答| 成人在线丰满少妇av| 欧美伊人久久| 天堂成人国产精品一区| 日本少妇一区| 欧美日韩1区| 国产精品普通话对白| 日韩欧美一区免费| 国产精品久久久久久久免费软件| 石原莉奈在线亚洲二区| 成人欧美一区二区三区的电影| 日韩高清不卡一区二区| 国产精品美女久久久| 日本韩国欧美超级黄在线观看| 久久精品国产精品亚洲毛片| 日韩国产一区二| 视频一区中文字幕| av一区二区高清| 久久天堂精品| 伊人久久av| 国产精品1区| 91精品国产自产在线丝袜啪| 日韩制服丝袜av| 合欧美一区二区三区| 日韩欧美精品| 四虎成人av| 久久精品日韩欧美| 国产毛片精品久久| 91欧美极品| 亚洲18在线| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 综合亚洲色图| 亚洲欧美日韩专区| 国产亚洲精品v| 国产韩日影视精品| 免费观看久久av| 91tv亚洲精品香蕉国产一区| 中文字幕成在线观看| 三上亚洲一区二区| 国产精品二区不卡| 午夜久久中文| 日韩在线免费| 亚洲www免费| 久久久久亚洲| 国产主播一区| 亚洲美女久久精品| 日本综合字幕| 免费av一区| 亚洲一区二区三区免费在线观看| 亚洲精品在线观看91| 亚洲一区欧美激情| 久久www成人_看片免费不卡| 香蕉成人久久| 亚洲资源网站| 欧美日韩一区二区国产 | 欧美a一区二区| 国产一区二区三区免费在线 | 日韩av一区二| 国产精品日韩精品中文字幕| 国产极品嫩模在线观看91精品| 国产精品啊啊啊| 精品国产99| 天堂中文在线播放| 免费视频国产一区| 蜜臀久久99精品久久久久久9| 中文字幕日韩亚洲| 国产精品天堂蜜av在线播放| 狠狠久久伊人| 久久久777| 日韩精品一区第一页| 日韩高清不卡一区二区| 国产日产高清欧美一区二区三区| 精品无人区麻豆乱码久久久| 日韩在线观看不卡| 喷白浆一区二区| 国产精品天堂蜜av在线播放| 国产va在线视频| 欧美精品黄色| 久久精品xxxxx| 国产 日韩 欧美一区| 丝瓜av网站精品一区二区| 国产精品调教| 欧美不卡高清| 久久国内精品| 日韩精品免费一区二区三区| 中文字幕日韩高清在线 | 久久亚洲人体| 亚洲精品电影| 欧美日韩1区| 视频福利一区| 日本欧美一区二区| 福利一区二区三区视频在线观看| 尤物在线精品| 久久av综合| 久久久久久久久久久妇女| 国产午夜久久| 国产美女久久| 91精品一区国产高清在线gif | 午夜av不卡| 国产在线不卡| 亚洲精品动态| 黄在线观看免费网站ktv| 亚洲精品888| 日韩高清不卡在线| 成人国产精选| 黑丝一区二区| 青青草国产精品亚洲专区无| 国产一区国产二区国产三区| 亚洲大全视频| 国产精品115| 色爱综合av| 亚洲精品欧美| 在线中文字幕播放| 一区二区三区网站| 久久久久亚洲精品中文字幕| 亚洲高清久久|