讓代碼簡潔而優(yōu)雅——恰到好處的使用數(shù)組的各種方法

本以為今天的帖子會(huì)很簡單,越寫越覺得啃了塊硬骨頭。

判斷是否是數(shù)組

沒啥好說的推薦 Array.isArray,示例:

Array.isArray([1, 2, 3, 4]);  // --> true
 
Array.isArray({
    a: 1,
    b: 2
});  // --> false
 
Array.isArray(new Array);  // --> true
 
Array.isArray("Array");  // --> false

注意:Array.isArray是ES 5.1推出的,很早以前的瀏覽器可能不支持,所以在使用的時(shí)候也應(yīng)注意兼容問題。處理方法如下:

if(typeof Array.isArray != "function") {
  Array.isArray = function(obj){
    return Object.prototype.toString.call(obj) == "[object Array]";
  }
}

定義數(shù)組

直接使用下面的方式,新建一個(gè)數(shù)組。不要使用new,這并不高級(jí),相反使用new的效率不如下面的方式。

const array = [];

恰到好處的使用

添加
1、array.push(item1, item2, ..., itemX); 將新元素添加到數(shù)組的末尾,并返回新的長度。

2、array.unshift(item1, item2, ..., itemX); 將新元素添加到數(shù)組的開頭,并返回新的長度。

3、array.splice(index, howmany, item1, ....., itemX); howmany傳0時(shí)表示純添加,多應(yīng)用于從某個(gè)位置添加一個(gè)或多個(gè)元素。

4、array1.concat(array2, array3, ..., arrayX); 連接兩個(gè)或多個(gè)數(shù)組,并返回已連接數(shù)組的副本。

刪除
1、pop();刪除數(shù)組的最后一個(gè)元素,并返回該元素。

2、shift();刪除數(shù)組的第一個(gè)元素,并返回該元素。

3、array.splice(index, howmany, item1, ....., itemX); 從index開始刪除howmany個(gè)元素,多應(yīng)用于從某個(gè)位置刪除一個(gè)或多個(gè)元素。

4、array.slice(start, end);選擇數(shù)組的一部分,并返回新數(shù)組。

5、array.filter(function(currentValue, index, arr), thisValue);從數(shù)組中篩選出新數(shù)組,有條件刪除元素可以用,如:array.filter(value => value > 10)

修改
1、array.splice(index, howmany, item1, ....., itemX); 這個(gè)應(yīng)該理解為刪除并添加,修改了數(shù)組的元素個(gè)數(shù)。

2、array.map(function(currentValue, index, arr), thisValue);批量修改,函數(shù)里面return的值會(huì)替換原位置的元素。

3、array.copyWithin(target, start, end);選一部分?jǐn)?shù)據(jù),覆蓋另一部分。這個(gè)函數(shù)使用較少也比較不好理解,簡單的說可以理解為復(fù)制后面start到end的元素,然后從target開始替換,有幾個(gè)替換為幾個(gè)。

4、array.fill(value, start, end);用某個(gè)值替換部分?jǐn)?shù)據(jù)。部分場景很有用,如初始化臟數(shù)組

查詢
1、array.filter(function(currentValue, index, arr), thisValue);篩選符合條件的元素,返回?cái)?shù)組

2、array.find(function(currentValue, index, arr), thisValue);查找數(shù)組中第一個(gè)符合條件的元素

3、array.findIndex(function(currentValue, index, arr), thisValue);查找數(shù)組中第一個(gè)符合條件的元素的index

4、array.indexOf(item, start);查找數(shù)組中第一個(gè)符合條件的元素的index。

5、array.lastIndexOf(item, start);這個(gè)是從后往前找,可以用于查找最后一個(gè)某元素。

排序
1、array.sort(compareFunction);使用sort能輕松的處理幾乎所有你想要的排序。如:array.sort((a, b) => a-b)

2、array.reverse();反轉(zhuǎn)數(shù)組中元素的順序。

校驗(yàn)
1、array.every(function(currentValue, index, arr), thisValue);檢查數(shù)組中的每個(gè)元素是否通過測試。如:array.every(age => age > 10);

2、array.some(function(currentValue, index, arr), thisValue);檢查數(shù)組中的任何元素是否通過測試。有一個(gè)符合條件就行

3、array.includes(element, start);檢查數(shù)組是否包含指定的元素。

遍歷
符合上面場景的盡量去使用上面場景,不要隨意使用遍歷,這并不算太好閱讀。

1、array.forEach(function(currentValue, index, arr), thisValue);遍歷所有元素,每個(gè)元素都會(huì)觸發(fā)函數(shù)。這個(gè)函數(shù)是數(shù)組的函數(shù)所以先說了,個(gè)人并不太推薦無腦使用這個(gè),因?yàn)檫@個(gè)函數(shù)沒法在中間停止,除非拋出異常

2、for (let i = 0; i < array.length; i++);能實(shí)現(xiàn)幾乎所有的需要遍歷的場景。在不需要繼續(xù)執(zhí)行的時(shí)候請記得使用continue和break這些跳出循環(huán)函數(shù)。

3、類似于棧消費(fèi)場景(先進(jìn)后消費(fèi)),推薦使用如下方式:

while (array.length) {
  let item = array.pop();
  console.log(item);
}

4、類似于隊(duì)列消費(fèi)場景(先進(jìn)先消費(fèi)),推薦使用如下方式:

while (array.length) {
  let item = array.pop();
  console.log(item);
}

數(shù)組與字符串
1、Array.from(object, mapFunction, thisValue);從字符串創(chuàng)建數(shù)組,如:Array.from('123') // => ['1', '2', '3']

2、array.toString();將數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果,如:['1', '2', '3'].toString() // => '1,2,3'

3、stringObject.split(separator,howmany);字符串分割為數(shù)組,如:'123'.split('') // => ['1', '2', '3']

4、array.join(separator);將數(shù)組的所有元素連接成一個(gè)字符串,separator可選。要使用的分隔符。如果省略,元素用逗號(hào)分隔。如:['1', '2', '3'].join('') // => '123'

總結(jié)

一些簡單的用法基本都在上面了,高階用法后面再寫一篇吧。
原創(chuàng)不易,盡量做到每天寫一篇,歡迎關(guān)注收藏點(diǎn)贊,發(fā)現(xiàn)問題歡迎留言指正。

方法匯總

方法 描述
concat() 連接兩個(gè)或多個(gè)數(shù)組,并返回已連接數(shù)組的副本。
copyWithin() 將數(shù)組中的數(shù)組元素復(fù)制到指定位置或從指定位置復(fù)制。
entries() 返回鍵/值對(duì)數(shù)組迭代對(duì)象。
every() 檢查數(shù)組中的每個(gè)元素是否通過測試。
fill() 用靜態(tài)值填充數(shù)組中的元素。
filter() 使用數(shù)組中通過測試的每個(gè)元素創(chuàng)建新數(shù)組。
find() 返回?cái)?shù)組中第一個(gè)通過測試的元素的值。
findIndex() 返回?cái)?shù)組中通過測試的第一個(gè)元素的索引。
forEach() 為每個(gè)數(shù)組元素調(diào)用函數(shù)。
from() 從對(duì)象創(chuàng)建數(shù)組。
includes() 檢查數(shù)組是否包含指定的元素。
indexOf() 在數(shù)組中搜索元素并返回其位置。
isArray() 檢查對(duì)象是否為數(shù)組。
join() 將數(shù)組的所有元素連接成一個(gè)字符串。
keys() 返回 Array Iteration 對(duì)象,包含原始數(shù)組的鍵.
lastIndexOf() 在數(shù)組中搜索元素,從末尾開始,并返回其位置。
map() 使用為每個(gè)數(shù)組元素調(diào)用函數(shù)的結(jié)果創(chuàng)建新數(shù)組。
pop() 刪除數(shù)組的最后一個(gè)元素,并返回該元素。
push() 將新元素添加到數(shù)組的末尾,并返回新的長度。
reduce() 將數(shù)組的值減為單個(gè)值(從左到右)。
reduceRight() 將數(shù)組的值減為單個(gè)值(從右到左)。
reverse() 反轉(zhuǎn)數(shù)組中元素的順序。
shift() 刪除數(shù)組的第一個(gè)元素,并返回該元素。
slice() 選擇數(shù)組的一部分,并返回新數(shù)組。
some() 檢查數(shù)組中的任何元素是否通過測試。
sort() 對(duì)數(shù)組的元素進(jìn)行排序。
splice() 從數(shù)組中添加/刪除元素。返回刪除結(jié)果
toString() 將數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果。
unshift() 將新元素添加到數(shù)組的開頭,并返回新的長度。
valueOf() 返回?cái)?shù)組的原始值。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 方法描述unshift()[https://www.w3school.com.cn/jsref/jsref_uns...
    ynwshy閱讀 190評(píng)論 0 0
  • 一.Array對(duì)象方法 Array 對(duì)象方法 .concat()[https://segmentfault.com...
    Angel_6c4e閱讀 780評(píng)論 0 0
  • 數(shù)組的基礎(chǔ) Array的對(duì)象屬性 constructor[https://www.w3school.com.cn/...
    櫻桃小白菜閱讀 273評(píng)論 0 1
  • 數(shù)組 知識(shí)匯總 前置知識(shí): 數(shù)組是一個(gè)有序的數(shù)據(jù)集合,可使用數(shù)組名稱和索引進(jìn)行訪問。 在JavaScript中數(shù)組...
    Daeeman閱讀 905評(píng)論 1 8
  • 本文整理靈感來源掘金大佬的:數(shù)據(jù)結(jié)構(gòu) - 數(shù)組[https://juejin.im/post/6844903917...
    橙色流年閱讀 616評(píng)論 0 1

友情鏈接更多精彩內(nèi)容