讓程式碼簡潔而優雅——恰到好處的使用陣列的各種方法
本以為今天的帖子會很簡單,越寫越覺得啃了塊硬骨頭。
判斷是否是陣列
沒啥好說的推薦 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推出的,很早以前的瀏覽器可能不支援,所以在使用的時候也應注意相容問題。處理方法如下:
if(typeof Array.isArray != "function") {
Array.isArray = function(obj){
return Object.prototype.toString.call(obj) == "[object Array]";
}
}
定義陣列
直接使用下面的方式,新建一個數組。不要使用new,這並不高階,相反使用new的效率不如下面的方式。
const array = [];
恰到好處的使用
新增
1、array.push(item1, item2, ..., itemX); 將新元素新增到陣列的末尾,並返回新的長度。
2、array.unshift(item1, item2, ..., itemX); 將新元素新增到陣列的開頭,並返回新的長度。
3、array.splice(index, howmany, item1, ....., itemX); howmany傳0時表示純新增,多應用於從某個位置新增一個或多個元素。
4、array1.concat(array2, array3, ..., arrayX); 連線兩個或多個數組,並返回已連線陣列的副本。
刪除
1、pop();刪除陣列的最後一個元素,並返回該元素。
2、shift();刪除陣列的第一個元素,並返回該元素。
3、array.splice(index, howmany, item1, ....., itemX); 從index開始刪除howmany個元素,多應用於從某個位置刪除一個或多個元素。
4、array.slice(start, end);選擇陣列的一部分,並返回新陣列。
5、array.filter(function(currentValue, index, arr), thisValue);從陣列中篩選出新陣列,有條件刪除元素可以用,如:array.filter(value => value > 10)
修改
1、array.splice(index, howmany, item1, ....., itemX); 這個應該理解為刪除並新增,修改了陣列的元素個數。
2、array.map(function(currentValue, index, arr), thisValue);批量修改,函式裡面return的值會替換原位置的元素。
3、array.copyWithin(target, start, end);選一部分資料,覆蓋另一部分。這個函式使用較少也比較不好理解,簡單的說可以理解為複製後面start到end的元素,然後從target開始替換,有幾個替換為幾個。
4、array.fill(value, start, end);用某個值替換部分資料。部分場景很有用,如初始化髒陣列
查詢
1、array.filter(function(currentValue, index, arr), thisValue);篩選符合條件的元素,返回陣列
2、array.find(function(currentValue, index, arr), thisValue);查詢陣列中第一個符合條件的元素
3、array.findIndex(function(currentValue, index, arr), thisValue);查詢陣列中第一個符合條件的元素的index
4、array.indexOf(item, start);查詢陣列中第一個符合條件的元素的index。
5、array.lastIndexOf(item, start);這個是從後往前找,可以用於查詢最後一個某元素。
排序
1、array.sort(compareFunction);使用sort能輕鬆的處理幾乎所有你想要的排序。如:array.sort((a, b) => a-b)
2、array.reverse();反轉陣列中元素的順序。
校驗
1、array.every(function(currentValue, index, arr), thisValue);檢查陣列中的每個元素是否通過測試。如:array.every(age => age > 10);
2、array.some(function(currentValue, index, arr), thisValue);檢查陣列中的任何元素是否通過測試。有一個符合條件就行
3、array.includes(element, start);檢查陣列是否包含指定的元素。
遍歷
符合上面場景的儘量去使用上面場景,不要隨意使用遍歷,這並不算太好閱讀。
1、array.forEach(function(currentValue, index, arr), thisValue);遍歷所有元素,每個元素都會觸發函式。這個函式是陣列的函式所以先說了,個人並不太推薦無腦使用這個,因為這個函式沒法在中間停止,除非丟擲異常。
2、for (let i = 0; i < array.length; i++);能實現幾乎所有的需要遍歷的場景。在不需要繼續執行的時候請記得使用continue和break這些跳出迴圈函式。
3、類似於棧消費場景(先進後消費),推薦使用如下方式:
while (array.length) {
let item = array.pop();
console.log(item);
}
4、類似於佇列消費場景(先進先消費),推薦使用如下方式:
while (array.length) {
let item = array.pop();
console.log(item);
}
陣列與字串
1、Array.from(object, mapFunction, thisValue);從字串建立陣列,如:Array.from('123') // => ['1', '2', '3']
2、array.toString();將陣列轉換為字串,並返回結果,如:['1', '2', '3'].toString() // => '1,2,3'
3、stringObject.split(separator,howmany);字串分割為陣列,如:'123'.split('') // => ['1', '2', '3']
4、array.join(separator);將陣列的所有元素連線成一個字串,separator可選。要使用的分隔符。如果省略,元素用逗號分隔。如:['1', '2', '3'].join('') // => '123'
總結
一些簡單的用法基本都在上面了,高階用法後面再寫一篇吧。
原創不易,儘量做到每天寫一篇,歡迎關注收藏點贊,發現問題歡迎留言指正。
方法彙總
方法 | 描述 |
---|---|
concat() | 連線兩個或多個數組,並返回已連線陣列的副本。 |
copyWithin() | 將陣列中的陣列元素複製到指定位置或從指定位置複製。 |
entries() | 返回鍵/值對陣列迭代物件。 |
every() | 檢查陣列中的每個元素是否通過測試。 |
fill() | 用靜態值填充陣列中的元素。 |
filter() | 使用陣列中通過測試的每個元素建立新陣列。 |
find() | 返回陣列中第一個通過測試的元素的值。 |
findIndex() | 返回陣列中通過測試的第一個元素的索引。 |
forEach() | 為每個陣列元素呼叫函式。 |
from() | 從物件建立陣列。 |
includes() | 檢查陣列是否包含指定的元素。 |
indexOf() | 在陣列中搜索元素並返回其位置。 |
isArray() | 檢查物件是否為陣列。 |
join() | 將陣列的所有元素連線成一個字串。 |
keys() | 返回 Array Iteration 物件,包含原始陣列的鍵. |
lastIndexOf() | 在陣列中搜索元素,從末尾開始,並返回其位置。 |
map() | 使用為每個陣列元素呼叫函式的結果建立新陣列。 |
pop() | 刪除陣列的最後一個元素,並返回該元素。 |
push() | 將新元素新增到陣列的末尾,並返回新的長度。 |
reduce() | 將陣列的值減為單個值(從左到右)。 |
reduceRight() | 將陣列的值減為單個值(從右到左)。 |
reverse() | 反轉陣列中元素的順序。 |
shift() | 刪除陣列的第一個元素,並返回該元素。 |
slice() | 選擇陣列的一部分,並返回新陣列。 |
some() | 檢查陣列中的任何元素是否通過測試。 |
sort() | 對陣列的元素進行排序。 |
splice() | 從陣列中新增/刪除元素。返回刪除結果 |
toString() | 將陣列轉換為字串,並返回結果。 |
unshift() | 將新元素新增到陣列的開頭,並返回新的長度。 |
valueOf() | 返回陣列的原始值。 |