Javascript:數(shù)組常用方法整理

下面以var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']為例

修改器方法:

修改器方法會改變原數(shù)組

1. arr.pop() && arr.push()

會改變原數(shù)組

arr.pop()刪除數(shù)組最后一個元素勒叠,并返回這個元素

arr.pop() // "g"

arr.push()在數(shù)組末尾增加一個元素爬范,返回數(shù)組的新長度

arr.push('l') // 8
arr // ["x", "u", "e", "y", "i", "n", "g", "l"]

2. arr.shift() && arr.unshift()

arr.shift() 刪除數(shù)組開頭第一個元素财著,并返回這個元素

arr.shift() // "x"

arr.unshift() 在數(shù)組開頭增加一個元素侧巨,返回數(shù)組新長度。

arr.unshift('l')  // 8 
arr // ["l", "x", "u", "e", "y", "i", "n", "g"]

3. arr.reverse()

會改變原數(shù)組

數(shù)組倒序射众,返回倒序后的數(shù)組

arr.reverse() // ["g", "n", "i", "y", "e", "u", "x"]

4. arr.sort() || arr.sort(compareFunction)

對數(shù)組進行排序澎胡,并返回排好序的當前數(shù)組。(寫得這么拗口是為了強調(diào)是原數(shù)組的順序改變
.sort()使用的是就地排序算法预厌,且不一定穩(wěn)定阿迈。
(就地排序意思是直接在原數(shù)組上排序。穩(wěn)定指的是兩個相等的元素排好序后前后順序不變)

默認排序順序是根據(jù)字符串Unicode碼點轧叽。
這意味著:

var scores = [1, 10, 21, 2]; 
scores.sort();  // [1, 10, 2, 21]
// 10在2之前,因為在 Unicode 指針順序中"10"在"2"之前

不過.sort()可以接受一個函數(shù)作為參數(shù)苗沧,自己指定排序規(guī)則:

var scores = [1, 10, 21, 2]; 
scores.sort(function (a, b) { // 從小到大排序
  return a - b
}) // [ 1, 2, 10, 21 ]

函數(shù)compareFunction 的規(guī)則如下:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 會被排列到 b 之前炭晒;
  • 如果 compareFunction(a, b) 等于 0 待逞, a 和 b 的相對位置不變。
    備注: ECMAScript 標準并不保證這一行為网严,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本)识樱;
  • 如果 compareFunction(a, b) 大于 0 , b 會被排列到 a 之前震束。
  • compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果怜庸,否則排序的結(jié)果將是不確定的。

5. arr.splice(start, deleteCount, item1, item2, ...)

修改數(shù)組垢村,從start開始割疾,刪除deleteCount個元素,再插入后面的item1, item2, ...

// 從下標0開始嘉栓,刪除一個元素宏榕,并插入‘X'
arr.splice(0, 1, 'X') // ["x"]
arr // ["X", "u", "e", "y", "i", "n", "g"]

訪問方法:

訪問方法不會改變原數(shù)組,一般都是返回一個新數(shù)組

1. arr1.concat(arr2)

合并arr1arr2

var arr1 = ["x", "u", "e"]
var arr2 = ["y", "i", "n", "g"]
arr1.concat(arr2) // ["x", "u", "e", "y", "i", "n", "g"]

2. arr.includes(searchElement, fromIndex)

fromIndex開始查找searchElement侵佃,找到了返回true麻昼,找不到返回false
fromIndex可省略,默認從下標0開始找趣钱。

arr.includes('u') // true
arr.includes('u', 2) // false

3. arr.join(separator)

數(shù)組合并成一個字符串涌献,每一個元素用separator隔開。
separator可省略首有,默認為,

arr.join() // "x,u,e,y,i,n,g"
arr.join('') // "xueying"

4. arr.slice(begin, end)

抽取數(shù)組在[begin,end)區(qū)間內(nèi)的元素燕垃,返回一個新數(shù)組。

arr.slice(0, 3) // ["x", "u", "e"]

5. arr.toString()

arr.toString() // "x,u,e,y,i,n,g"

6. arr.indexOf(searchElement[, fromIndex = 0])

返回searchElement的下標井联,沒有則返回 -1
可以指定fromIndex表示從哪個下標開始查找卜壕,默認為下標0

arr.indexOf('u') // 1
arr.indexOf('u', 2) // -1

7. arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])

找到數(shù)組中最后一個和searchElement相等的元素的下標。
可以指定fromIndex表示從哪個下標開始查找烙常,默認從數(shù)組最后一個元素開始轴捎。

var arr = ["x", "u", "l", "e", "y", "i", "n", "g", "l"]
arr.lastIndexOf('l') // 8

迭代方法

1. arr.forEach()

語法:

array.forEach(callback(currentValue, index, array){
    //do something
}, thisArg)

對數(shù)組每一個元素執(zhí)行callback函數(shù)鹤盒。

callback函數(shù)接收3個參數(shù):

  1. currentValue:當前元素的值
  2. index: 當前元素的下標
  3. array:原數(shù)組

thisArg:可選,用作callback函數(shù)的this值侦副。

var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
arr.forEach((element, index, array) => console.log('arr[' + index + '] = ' + element))
/* 
arr[0] = x
arr[1] = u
arr[2] = e
arr[3] = y
arr[4] = i
arr[5] = n
arr[6] = g
*/

2. arr.every(callback[, thisArg]) && arr.some(callback[, thisArg])

arr.every(callback[, thisArg])
測試數(shù)組的 所有 元素是否都通過了callback函數(shù)的測試侦锯。
全部通過返回true ,否則返回false
thisArg指定this值秦驯。

// 格式和forEach方法沒區(qū)別
var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
console.log(arr.every((element, index, array) => element === element.toLowerCase())) // 數(shù)組中的元素是否都為小寫
// true

arr.some(callback[, thisArg])
測試數(shù)組的 某些 元素是否全部通過了callback函數(shù)的測試尺碰。

// 語法和forEach方法沒區(qū)別
var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.some((element, index, array) => element === element.toLowerCase())) // 數(shù)組中是否有小寫的元素
// true

3. arr.filter(callback[, thisArg])

過濾器,創(chuàng)建一個新數(shù)組, 其包含通過所提供函數(shù)實現(xiàn)的測試的所有元素
語法還是跟forEach方法沒區(qū)別译隘。

var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.filter((element, index, array) => element === element.toLowerCase())) 
// [ 'u', 'e', 'y', 'i', 'n', 'g' ]

4. arr.find(callback[, thisArg]) && arr.findIndex(callback[, thisArg])

arr.find(callback[, thisArg])
語法同上亲桥。
返回數(shù)組中第一個滿足callback函數(shù)的元素的值。否則返回 undefined固耘。

var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.find((element, index, array) => element === element.toLowerCase()))
// "u"

arr.findIndex(callback[, thisArg])
語法同上题篷。
返回數(shù)組中第一個滿足callback函數(shù)的元素的索引。否則返回-1厅目。

var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.findIndex((element, index, array) => element === element.toLowerCase()))
// 1

5. arr.entries()

(迭代器)返回一個新的Array Iterator對象番枚,該對象包含數(shù)組中每個索引的鍵/值對。
跟Python中迭代器一樣璧瞬,用.next()訪問下一鍵值對户辫。

var iterator = arr.entries();
iterator.next() // {value: Array(2), done: false} done表示迭代是否已經(jīng)完成
iterator.next().value //  [1, "u"]

6. arr.keys() && arr.values()

arr.keys()
返回一個新的Array迭代器,它包含數(shù)組中每個索引的鍵嗤锉。

var iterator = arr.keys();
iterator.next() // {value: 0, done: false}
iterator.next().value // 1
// 不斷next直到最后一個
console.log(iterator.next())  // {value: undefined, done: true}

arr.values()
返回一個新的 Array Iterator 對象渔欢,它包含數(shù)組每個索引的值。

PS: Chrome 未實現(xiàn)瘟忱,F(xiàn)irefox未實現(xiàn)奥额,Edge已實現(xiàn)。
Chrome 及Firefox可以用"arrSymbol.iterator"方法來代替values()方法访诱。

var arr = [1,2,3,4,5]
var i = arr[Symbol.iterator]()
i.next() // {value: 1, done: false}
i.next() // {value: 2, done: false}

7. arr.map(callback)

創(chuàng)建一個新數(shù)組垫挨,其結(jié)果是該數(shù)組中的每個元素都調(diào)用callback函數(shù)后返回的結(jié)果。
語法:

arr.map(function callback(currentValue, index, array) { 
    // Return element for new_array 
}[, thisArg])

例子:

arr.map((element, index, array) => element.toUpperCase()) // ["X", "U", "E", "Y", "I", "N", "G"]

8. arr.reduce(callback[, initialValue])

累加器, 數(shù)組中的每個元素(從左到右)應(yīng)用一個函數(shù)触菜,將其減少為單個值九榔。

callback函數(shù)接收4個參數(shù):

  1. accumulator:累加器累加回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時返回的累積值,或initialValue
  2. currentValue:數(shù)組中正在處理的元素
  3. currentIndex:數(shù)組中正在處理的當前元素的索引涡相。
  4. array:原數(shù)組

initialValue:用作第一個調(diào)用 callback的第一個參數(shù)的值哲泊。 如果沒有提供初始值,則將使用數(shù)組中的第一個元素催蝗。 在沒有初始值的空數(shù)組上調(diào)用 reduce 將報錯切威。

回調(diào)函數(shù)第一次執(zhí)行時,accumulator 和currentValue的取值有兩種情況:

  1. 調(diào)用reduce時提供initialValue丙号,accumulator取值為initialValue先朦,currentValue取數(shù)組中的第一個值缰冤。
  2. 沒有提供 initialValue,accumulator取數(shù)組中的第一個值喳魏,currentValue取數(shù)組中的第二個值棉浸。
// 取最大值
var arr = [1, 2, 3, 4, 5, 6]
console.log(arr.reduce((accumulator, currentValue) =>  Math.max(accumulator, currentValue)))
// 6

// 連接數(shù)組的元素
var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
console.log(arr.reduce((accumulator, currentValue) =>  accumulator.concat(currentValue)))
// xueying
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市截酷,隨后出現(xiàn)的幾起案子涮拗,更是在濱河造成了極大的恐慌乾戏,老刑警劉巖迂苛,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鼓择,居然都是意外死亡三幻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門呐能,熙熙樓的掌柜王于貴愁眉苦臉地迎上來念搬,“玉大人,你說我怎么就攤上這事摆出±驶玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵偎漫,是天一觀的道長爷恳。 經(jīng)常有香客問我,道長象踊,這世上最難降的妖魔是什么温亲? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮杯矩,結(jié)果婚禮上栈虚,老公的妹妹穿的比我還像新娘。我一直安慰自己史隆,他們只是感情好魂务,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泌射,像睡著了一般粘姜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魄幕,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天相艇,我揣著相機與錄音,去河邊找鬼纯陨。 笑死坛芽,一個胖子當著我的面吹牛留储,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咙轩,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼获讳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了活喊?” 一聲冷哼從身側(cè)響起丐膝,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钾菊,沒想到半個月后帅矗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡煞烫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年浑此,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞详。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡凛俱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出料饥,到底是詐尸還是另有隱情蒲犬,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布岸啡,位于F島的核電站原叮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凰狞。R本人自食惡果不足惜篇裁,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赡若。 院中可真熱鬧达布,春花似錦、人聲如沸逾冬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽身腻。三九已至产还,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘀趟,已是汗流浹背脐区。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留她按,地道東北人牛隅。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓炕柔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親媒佣。 傳聞我的和親對象是個殘疾皇子匕累,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容