今天要來學一下關於操作陣列(Array)的手法,透過這些方法我們可以更好地操作陣列中的元素以達到需求。
而且我們可以透過在瀏覽器上查看陣列的原型物件了解目前瀏覽器實作出哪些方法供我們使用。
console.log(Array.prototype);
接下來的三篇文章總共會介紹三十個目前 Google 瀏覽器已經實作出來的方法。
為了方便閱讀,所以撰寫的格式基本上會以下圖所示:
就讓我們來一探究竟吧!
陣列轉字串
arr.join([separator])
join()方法可以將陣列或者類陣列的所有元素串接並合併成一個字串回傳
而我們也可以自訂元素彼此之間的連接方式
const array = [1,2,'test',4,5];
const string = array.join("-");
// 1-2-test-4-5
console.log(string);
原陣列會改變
會反轉原陣列內的元素
const array = [1,2,3,4,5];
const newArray = array.reverse();
// [5, 4, 3, 2, 1]
console.log(newArray);
原陣列會改變
arr.sort([compareFunction])
會在原陣列內將元素排序並回傳排序後的陣列。
Ex: 不帶引數時,依照字母排序
const array = ['g','f','a','v','r'];
// ["a", "f", "g", "r", "v"]
console.log(array.sort());
Ex2 : 將陣列內的數字依大小排列
const array = [55,2,7,66,97,66];
const newArray = array.sort(function(param1,param2){
return param1 - param2;
});
// [2, 7, 55, 66, 66, 97]
console.log(newArray);
Ex3: 不區分大小寫的排序
const array = ['Bug','apple','lion','Cat'];
const newArray = array.sort(function(param1,param2){
let s = param1.toLowerCase();
let t = param2.toLowerCase();
//如果s的字母順位較t的字母順位高,往後排序
if(s > t)
return 1;
//如果t的字母順位較s的字母順位高,往前排序
if(t > s)
return -1;
return;
});
// ["apple", "Bug", "Cat", "lion"]
console.log(newArray);
原陣列會改變
arr.unshift(element1[, ...[, elementN]])
可以將一個或多個元素夾到陣列的開頭,並回傳陣列的新長度
var array = [1,2];
// 5
console.log(array.unshift(4,5,6));
// [4, 5, 6, 1, 2]
console.log(array);
原陣列會改變
會移除並回傳陣列的第一個元素
。
var array = [4,5,6,7,8];
var delElement = array.shift();
console.log(delElement);
// [5, 6, 7, 8]
console.log(array);
原陣列會改變
arr.push(element1[, ...[, elementN]])
可以在陣列最後面的位置新增一個或多個元素
var array = [4,5,6,7,8];
array.push('新增的文字');
// [4, 5, 6, 7, 8, "新增的文字"]
console.log(array);
原陣列會改變
會移除並回傳陣列的最後一個元素
。
var array = [4,5,6,7,8];
var delElement = array.pop();
// 8
console.log(delElement);
// [4, 5, 6, 7]
console.log(array);
原陣列會改變
可刪除
或新增元素
到陣列中,也可以同時執行這兩件事情
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
元素數量
start
開始,要加入到陣列的元素。let array =[1,2,3,4,5,6,7,8,9];
// 從索引位置2(包含)刪除4個元素
let newArray = array.splice(2,4);
// [3,4,5,6]
console.log(newArray);
// [1,2,7,8,9]
console.log(array);
let array2 =[1,2,3,4,5,6,7,8,9];
let newArray2 = array2.splice(2,4,'aa','bb');
// [3,4,5,6]
console.log(array2);
// [1,2,'aa','bb',7,8,9]
console.log(newArray2);
回傳新陣列,原陣列不改變
需要合併兩個或多個陣列時使用
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
要注意的是concat()中的引數若是一維陣列,則會將陣列的元素值串接回傳。但若是與二維(或多維)陣列合併的話,則會將裡面的陣列直接一併串接。
let array = [1,2,3];
// [1,2,3,4,5,6]
console.log(array.concat([4,5,6]));
// [1,2,3,7,8,9,Array(2)];
console.log(array.concat([7,8,9,[10,11]]));
回傳新陣列,原陣列不改變
arr.slice([begin[, end]])
但不包含end的元素
)slice(-2)
表示要拷貝陣列的最後兩個元素slice(1,-1)
表示拷貝陣列中的第二個元素至倒數第二個元素要注意的是在
slice方法中,兩個數字皆為索引值,但是在
splice 的第二個參數是**要刪除的元素數量**。
const array = [1,2,3,4,5,6,7,8,[9,10]];
// 回傳從索引位置2到索引位置5之前的陣列元素
const newArray = array.slice(2,5);
// [3, 4, 5]
console.log(newArray);
// 原陣列沒有被修改,所以回傳索引位置2之後至最後一個元素之前的所有元素
const newArray2 = array.slice(2,-1);
// [3, 4, 5, 6, 7, 8]
console.log(newArray2);
今天先這樣囉,明天繼續介紹陣列的方法~
真是好精確和完整,我會常來這裡巡你的Array田~
我都來參考重點然後記下來(哈~)
別走遠路,直接直搗hexo巢就好~
const array = [55,2,7,66,97,66];
console.log(array.sort((param1,param2) => param1 - param2
))
//[2,7,55,66,66,97]
});
請問這邊是怎麼做比較的呢...我知道是true跟false對比 可是不太懂比較的順序是怎麼運作的麻煩大大