使用 Array 構造函數:javascript
var arr1 = new Array(); //建立一個空數組 var arr2 = new Array(20); // 建立一個包含20項的數組 var arr3 = new Array("lily","lucy","Tom"); // 建立一個包含3個字符串的數組
使用數組字面量表示法:前端
var arr4 = []; //建立一個空數組 var arr5 = [20]; // 建立一個包含1項的數組 var arr6 = ["lily","lucy","Tom"]; // 建立一個包含3個字符串的數組
數組原型方法總覽java
//會改變原數組 push()和pop() shift() 和 unshift() sort() reverse() splice() //不會改變原數組 concat() slice() join() indexOf()和 lastIndexOf() (ES5新增) forEach() (ES5新增) map() (ES5新增) filter() (ES5新增) every() (ES5新增) some() (ES5新增) reduce()和 reduceRight() (ES5新增)
join()面試
join(separator): 將數組的元素組起一個字符串,以separator爲分隔符,省略的話則用默認用逗號爲分隔符,該方法只接收一個參數:即分隔符。算法
var arr = [1,2,3]; console.log(arr.join()); // 1,2,3 console.log(arr.join("-")); // 1-2-3 console.log(arr); // [1, 2, 3](原數組不變)
經過join()方法能夠實現重複字符串,只需傳入字符串以及重複的次數,就能返回重複後的字符串:segmentfault
function repeatString(str, n) { return new Array(n + 1).join(str); } console.log(repeatString("abc", 3)); // abcabcabc console.log(repeatString("Hi", 2)); // HiHi
push()和pop()數組
pop():數組末尾移除最後一項,減小數組的 length 值,而後返回移除的項。數據結構
var arr = ["Lily","lucy","Tom"]; var count = arr.push("Jack","Sean"); console.log(count); // 5 console.log(arr); // ["Lily", "lucy", "Tom", "Jack", "Sean"] var item = arr.pop(); console.log(item); // Sean console.log(arr); // ["Lily", "lucy", "Tom", "Jack"]
shift() 和 unshift()dom
這組方法和上面的push()和pop()方法正好對應,一個是操做數組的開頭,一個是操做數組的結尾。函數
var arr = ["Lily","lucy","Tom"]; var count = arr.unshift("Jack","Sean"); console.log(count); // 5 console.log(arr); //["Jack", "Sean", "Lily", "lucy", "Tom"] var item = arr.shift(); console.log(item); // Jack console.log(arr); // ["Sean", "Lily", "lucy", "Tom"]
sort()
在排序時,sort()方法會調用每一個數組項的 toString()轉型方法,而後比較獲得的字符串,以肯定如何排序。即便數組中的每一項都是數值, sort()方法比較的也是字符串,所以會出現如下的這種狀況:
var arr1 = ["a", "d", "c", "b"]; console.log(arr1.sort()); // ["a", "b", "c", "d"] arr2 = [13, 24, 51, 3]; console.log(arr2.sort()); // [13, 24, 3, 51] console.log(arr2); // [13, 24, 3, 51](元數組被改變)
經過比較函數產生降序排序的結果
function compare(value1, value2) { if (value1 < value2) { return 1; } else if (value1 > value2) { return -1; } else { return 0; } } arr2 = [13, 24, 51, 3]; console.log(arr2.sort(compare)); // [51, 24, 13, 3]
經過比較函數產生隨機排序數組的結果
function randomArr(arr) { // body... return arr.sort(function(pre,next) { return (0.5 - Math.random()) }) }
即洗牌算法,但實際證實上面這個並不徹底隨機
function shuffleArray(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; }
reverse()
var arr = [13, 24, 51, 3]; console.log(arr.reverse()); //[3, 51, 24, 13] console.log(arr); //[3, 51, 24, 13](原數組改變)
concat()
concat() :將參數添加到原數組中。這個方法會先建立當前數組一個副本,而後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組。在沒有給 concat()方法傳遞參數的狀況下,它只是複製當前數組並返回副本。
var arr = [1,3,5,7]; var arrCopy = arr.concat(9,[11,13]); console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13] console.log(arr); // [1, 3, 5, 7](原數組未被修改)
slice()
若是有兩個參數,該方法返回起始和結束位置之間的項——但不包括結束位置的項。
var arr = [1,3,5,7,9,11]; var arrCopy = arr.slice(1); var arrCopy2 = arr.slice(1,4); var arrCopy3 = arr.slice(1,-2); var arrCopy4 = arr.slice(-4,-1); console.log(arr); //[1, 3, 5, 7, 9, 11](原數組沒變) console.log(arrCopy); //[3, 5, 7, 9, 11] console.log(arrCopy2); //[3, 5, 7] console.log(arrCopy3); //[3, 5, 7] console.log(arrCopy4); //[5, 7, 9]
splice()
var arr = [1,3,5,7,9,11]; var arrRemoved = arr.splice(0,2); console.log(arr); //[5, 7, 9, 11] console.log(arrRemoved); //[1, 3] var arrRemoved2 = arr.splice(2,0,4,6); console.log(arr); // [5, 7, 4, 6, 9, 11] console.log(arrRemoved2); // [] var arrRemoved3 = arr.splice(1,1,2,4); console.log(arr); // [5, 2, 4, 4, 6, 9, 11] console.log(arrRemoved3); //[7]
indexOf()和 lastIndexOf()
var arr = [1,3,5,7,7,5,3,1]; console.log(arr.indexOf(5)); //2 console.log(arr.lastIndexOf(5)); //5 console.log(arr.indexOf(5,2)); //2 console.log(arr.lastIndexOf(5,4)); //2 console.log(arr.indexOf("5")); //-1
forEach()
var arr = [1, 2, 3, 4, 5]; arr.forEach(function(x, index, a){ console.log(x + '|' + index + '|' + (a === arr)); }); // 輸出爲: // 1|0|true // 2|1|true // 3|2|true // 4|3|true // 5|4|true
map()
var arr = [1, 2, 3, 4, 5]; var arr2 = arr.map(function(item){ return item*item; }); console.log(arr2); //[1, 4, 9, 16, 25]
console.log([1,2,3].map(parseInt))//[ 1, NaN, NaN ]
console.log([1,2,3].map(function(val,key,arr) { parseInt(val,key) })) //循環返回出[parseInt(1,0),parseInt(2,1),parseInt(3,2)]即爲[1,NaN,NaN]
filter()
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var arr2 = arr.filter(function(x, index) { return index % 3 === 0 || x >= 8; }); console.log(arr2); //[1, 4, 7, 8, 9, 10]
every()
var arr = [1, 2, 3, 4, 5]; var arr2 = arr.every(function(x) { return x < 10; }); console.log(arr2); //true var arr3 = arr.every(function(x) { return x < 3; }); console.log(arr3); // false
some()
var arr = [1, 2, 3, 4, 5]; var arr2 = arr.some(function(x) { return x < 3; }); console.log(arr2); //true var arr3 = arr.some(function(x) { return x < 1; }); console.log(arr3); // false
reduce()和 reduceRight()
var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev, cur, index, array){ return prev + cur; },10); console.log(sum); //25
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5 的寫法 var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES6 的寫法 let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
// NodeList 對象 let ps = document.querySelectorAll('p'); Array.from(ps).forEach(function (p) { console.log(p); }); // arguments 對象 function foo() { var args = Array.from(arguments); // querySelectorAll方法返回的是一個相似數組的對象,只有將這個對象轉爲真正的數組,才能使用forEach方法。 }
// arguments 對象 function foo() { var args = [...arguments]; } // NodeList 對象 [...document.querySelectorAll('div')]
Array.of(3, 11, 8) // [3,11,8] Array.of(3) // [3] Array.of(3).length // 1
Array() // [] Array(3) // [, , ,] Array(3, 11, 8) // [3, 11, 8]
法,會修改當前數組。
Array.prototype.copyWithin(target, start = 0, end = this.length)
它接受三個參數。
// 將 3 號位複製到 0 號位 [1, 2, 3, 4, 5].copyWithin(0, 3, 4) // [4, 2, 3, 4, 5] // -2 至關於 3 號位, -1 至關於 4 號位 [1, 2, 3, 4, 5].copyWithin(0, -2, -1) // [4, 2, 3, 4, 5] // 將 3 號位複製到 0 號位 [].copyWithin.call({length: 5, 3: 1}, 0, 3) // {0: 1, 3: 1, length: 5}
爲true的成員,而後返回該成員。若是沒有符合條件的成員,則返回undefined。
- find方法的回調函數能夠接受三個參數,依次爲當前的值、當前的位置和原數組。 ``` [1, 5, 10, 15].find(function(value, index, arr) { return value > 9; }) // 10 ```
數組實例的findIndex方法的用法與find方法很是相似,返回第一個符合條件的數組成員的位置,若是全部成員都不符合條件,則返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) { return value > 9; }) // 2
['a', 'b', 'c'].fill(7) // [7, 7, 7] new Array(3).fill(7) // [7, 7, 7]
['a', 'b', 'c'].fill(7, 1, 2) // ['a', 7, 'c']
用for...of循環進行遍歷,惟一的區別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 // 1 for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a' // 'b' for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a" // 1 "b"
已經支持。
[1, 2, 3].includes(2); // true [1, 2, 3].includes(4); // false [1, 2, NaN].includes(NaN); // true
但數組長度爲 3 ),則會重置爲從 0 開始。
[1, 2, 3].includes(3, 3); // false [1, 2, 3].includes(3, -1); // true
持續更新中~喜歡留下個贊哦!