[JavaScript] 常用的陣列(Array)操作大全

ARRAY OBJECT - 陣列物件

Array Object - 陣列宣告
範例說明
var team = new Array(9);宣告一個0~9共10個的Array,team[0], team[1]…
var team = new Array();宣告一個空Array,可任意新增值到Array中,例如,team[20] = 'KKBruce';即會產生team[0~19]的空Array,team[20]為指定值
var team = new Array('Bruce', 'Sherry', 'Daniel');直接帶值宣告team[0],team[1],team[2]三個Array
var team = ['Bruce','Sherry','Daniel'];透過[]符號直接宣告Array及值

第四種「var team = ['Bruce','Sherry','Daniel'];」的用法在JSON裡很重要,建議一開始就習慣使用此種方式來建立陣列及值。

Array物件的屬性和方法


Array Object - 屬性和方法
名稱說明
length屬性,取得陣列的元素個數,也就是陣列的長度
join()將陣列的元素使用字串方式顯示,每個陣列元素使用「,」符號分隔,可指定使用的分隔符號,a.join('-->')
reverse()將陣列的元素反轉,本來是陣列的最後一個元素成為第一個元素
sort()將陣列所有元素進行排序
concat(array)將參數的陣列合併到目前的陣列中
push()由push()與pop()來寶現堆疊(stack),stack.push('a');將a字串放入stack陣列
pop()先進後出,由最後一個Index來取出Array,例:push()進去a,b,c三個值,那pop會由c,b,a順序取出




join : 將陣列元素用固定符號串成字串 (常用)
var arr = ["jack", "john", "may", "su", "Ada"];
var str = arr.join("、");
ANS:
str 為 jack、john、may、su、Ada

清除或增加陣列長度 (清除陣列很好用)
var arr = [1, 2, 3, 4, 5, 6];
arr.length = 2;
ANS:
[1,2]
arr.length = 0;
ANS:
[]
arr.length = 5;
ANS:
[,,,,]


刪除陣列元素
var arr = [1, 2, 3, 4, 5, 6];
delete arr[1];
ANS:
[1,,3, 4, 5, 6]

Array.form : 將字串或輸入參數組成陣列 (非常方便)
MDN 範例 : 
Array-like object (arguments) to Array
(function () {
var args = Array.from(arguments);
return args;
})(1, 2, 3); 
ANS:
[1, 2, 3]

Any iterable object...
Array.from(new Set(["foo", window]));
ANS:
["foo", window]

Map
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);
ANS:
[[1, 2], [2, 4], [4, 8]]

Strings are both array-like and iterable
Array.from("foo");  //<-- 超方便
ANS:
["f", "o", "o"]

Using an arrow function as the map function to
manipulate the elements
Array.from([1, 2, 3], x => x + x);
ANS:
[2, 4, 6]

Generate a sequence of numbers
Array.from({length:5}, (v, k) => k);
ANS:
[0, 1, 2, 3, 4]

sort : 陣列排序 (很好用)
var arr = [5, 9, 1, 3, 2, 6];
arr.sort();
ANS:
[1,2,3,5,6,9]
//也可以這樣寫
arr.sort(function (a,b) {
return a - b;
})
ANS:
[1,2,3,5,6,9]

//如果要反過來排序的話
arr.sort(function (a,b) {
return b - a;
})
ANS:
[9,6,5,3,2,1]

push : 新增元素或元素組到陣列 (想不用到都不行)
var arr = {
name: [],
data:[]
};
arr.name.push("jack");
arr.name.push("john");
arr.data.push({ weight: 60, height: 170 });
arr.data.push({ weight: 62, height: 175 });
JSON.stringify(arr);
ANS:
(透過JSON.stringify 返回的是字串喔,方便看結構所以用物件實字來表示)
{
"name":["jack","john"],
"data":[
{"weight":60,"height":170},
{"weight":62,"height":175}
]

splice : 改變陣列內容,移除或新增元素
array.splice(index , howMany[, element1[, ...[, elementN]]])
參數
index : 要從哪個索引位置開始改變
howMany : 用來指出要移除多少個元素. 如果 howMany 等於 0,則沒有任何元素被移除
element1, ..., elementN : 要加入陣列的元素,如果省略則表示不加入只刪除
官網範例 : 
var myFish = ["angel", "clown", "mandarin", "surgeon"];
//removes 0 elements from index 2, and inserts "drum"
var removed = myFish.splice(2, 0, "drum");
//myFish is ["angel", "clown", "drum", "mandarin", "surgeon"]
//removed is [], no elements removed
//removes 1 element from index 3
removed = myFish.splice(3, 1);
//myFish is ["angel", "clown", "drum", "surgeon"]
//removed is ["mandarin"]
//removes 1 element from index 2, and inserts "trumpet"
removed = myFish.splice(2, 1, "trumpet");
//myFish is ["angel", "clown", "trumpet", "surgeon"]
//removed is ["drum"]
//removes 2 elements from index 0, and inserts "parrot", "anemone" and "blue"
removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
//myFish is ["parrot", "anemone", "blue", "trumpet", "surgeon"]
//removed is ["angel", "clown"]
//removes 2 elements from index 3
removed = myFish.splice(3, Number.MAX_VALUE);
//myFish is ["parrot", "anemone", "blue"]
//removed is ["trumpet", "surgeon"]

concat : 會將兩個陣列合併產生新的陣列,原陣列不改變 (不常用,但很簡單就記一下吧)
var alpha = ["a", "b", "c"];
var numeric = [1, 2, 3];
var alphaNumeric = alpha.concat(numeric);
ANS:
["a", "b", "c", 1, 2, 3]

some : 陣列比對,只要有一個元素是 true,就返回 true (很好用)
var arr = ["jack", "john", "may", "su", "Ada"];
var flag = arr.some(function (value, index, array) {
return value == "may" ? true : false;
});
ANS:
flag 為 true

every :  陣列比對,所有元素都是 true 才是 true (很好用)
var arr = ["jack", "john", "may", "su", "Ada"];
var flag = arr.every(function (value, index, array) {
return value.length > 2;
});
ANS:
flag 為 false

filter : 陣列過濾,透過 filter 的過濾條件返回一個新陣列 (非常好用)
var arr = ["jack", "john", "may", "su", "Ada"];
var arr2 = arr.filter(function (value) {
return value.length > 3;
});
arr2.join("、");
ANS:
jack、john

map : 對陣列中的各元素進行操作,操作後的值會被寫入新的陣列中並返回
var arr = [1, 2, 3, 4, 5, 6];
var arr2 = arr.map(function (element,index,array) {
return element * 2;
});
arr2.join("、");
ANS:
2、4、6、8、10、12

reduce : 陣列中的每一個元素都會呼叫一次callback函數,唯一不同的是,函數的回傳值會當作下一次呼叫的傳入值,方向為索引 0 到 陣列尾端 (冷門,幾乎可以不用記)
var arr = [1, 2, 3, 4, 5, 6];
var flag = arr.reduce(function (previousValue, currentValue, index, array) {
return previousValue + currentValue;
})
ANS:
所以 flag 為 1 + 2 + 3 + 4 + 5 + 6 = 21