陣列
JavaScript 的陣列可以看作是一種特別的「物件」, 陣列內可以是原始的資料類型、其他陣列、函式等等。
建立陣列
陣列可以使用字面表達語法來建立︰
1
| var fruits = ['Apple', 'Banana'];
|
或是使用 Array 的建構子來建立︰
1 2 3
| var fruits = new Array(); fruits[0] = "Apple"; fruits[1] = "Banana";
|
(透過索引)取得陣列項目
1 2
| var first = fruits[0]; var last = fruits[fruits.length - 1];
|
迭代陣列
1 2 3 4 5
| fruits.forEach(function(item, index, array) { console.log(item, index); });
|
加入項目至陣列末端
1 2
| var newLength = fruits.push('Orange');
|
移除陣列末端項目
1 2
| var last = fruits.pop();
|
移除陣列前端項目
1 2
| var first = fruits.shift();
|
加入項目至陣列前端
1 2
| var newLength = fruits.unshift('Strawberry')
|
在陣列中尋找項目的索引
1 2 3 4 5
| fruits.push('Mango');
var pos = fruits.indexOf('Banana');
|
移除指定索引位置的項目
1 2 3
| var removedItem = fruits.splice(pos, 1);
|
移除指定索引位置起的多個項目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot']; console.log(vegetables);
var pos = 1, n = 2;
var removedItems = vegetables.splice(pos, n);
console.log(vegetables);
console.log(removedItems);
|
複製陣列
1 2
| var shallowCopy = fruits.slice();
|
將陣列元素合併成字串
1 2 3 4 5 6 7 8 9 10
| var elements = ['Fire', 'Air', 'Water'];
console.log(elements.join());
console.log(elements.join(''));
console.log(elements.join('-'));
|
刪除陣列元素
刪除陣列元素後,該元素為undefined。
1 2 3 4
| var arr = [1, 2, 3, 4, 5, 6];
delete arr[1];
|
將字串或輸入參數組成陣列
1 2 3 4 5
| console.log(Array.from('foo'));
console.log(Array.from([1, 2, 3], x => x + x));
|
對陣列中的各元素進行操作,操作後的值會被寫入新的陣列中並返回
map 會將所有陣列中的元素依序分別傳入一次至 callback 函式當中,並以此回呼函式每一次被呼叫的回傳值來建構一個新的陣列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1);
var arr = [1, 2, 3, 4, 5, 6];
var arr2 = arr.map(function (element,index,array) {
return element * 2;
});
console.log(arr2);
|
會將兩個陣列合併產生新的陣列,原陣列不改變
concat() 方法被用來合併兩個或多個陣列。此方法不會改變現有的陣列。
1 2 3 4 5
| const array1 = ['a', 'b', 'c']; const array2 = ['d', 'e', 'f'];
console.log(array1.concat(array2));
|
陣列比對(some)
陣列比對,只要有一個元素是 true,就返回 true。
1 2 3 4 5 6 7 8 9
| var array = [1, 2, 3, 4, 5];
var even = function(element) { return element % 2 === 0; };
console.log(array.some(even));
|
陣列比對(every)
陣列比對,所有元素都是 true 才是 true。
1 2 3 4 5 6 7 8
| function isBelowThreshold(currentValue) { return currentValue < 40; }
var array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold));
|
陣列過濾
陣列過濾,透過 filter 的過濾條件返回一個新陣列。
1 2 3 4 5 6
| var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
|
檢查傳入的值是否為陣列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Array.isArray([]); Array.isArray([1]); Array.isArray(new Array()); Array.isArray(new Array('a', 'b', 'c', 'd')); Array.isArray(new Array(3));
Array.isArray(Array.prototype);
Array.isArray(); Array.isArray({}); Array.isArray(null); Array.isArray(undefined); Array.isArray(17); Array.isArray('Array'); Array.isArray(true); Array.isArray(false); Array.isArray({ __proto__: Array.prototype });
|
參考文獻
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/map
https://sweeteason.pixnet.net/blog/post/41263148-javascript-%E5%B8%B8%E7%94%A8%E7%9A%84%E9%99%A3%E5%88%97%28array%29%E6%93%8D%E4%BD%9C%E5%A4%A7%E5%85%A8