❤️ javascript30是一系列的視頻教程,旨在30天編寫30個前端小項目。 這些項目不須要使用其餘lib,不須要編譯,不須要模板,迴歸最純真的JavaScript;javascript
🐶 🐶 🐶前端
🐚 這是這個系列的第4篇java
- 1. Drum Kit
- 2.JS + CSS Clock
- 3.CSS Variables
- 4.Array Cardio 1
項目代碼同步更新在男同交友網git
熟悉並掌握JavaScript中Array的使用,以及一些開發的小技巧;github
本期先講一部分,剩餘的在第7期中繼續完成;數組
JS瀏覽器
length微信
用處:app
🌰:frontend
const length_test = [1, 3, 55, 66]
console.log(length_test.length)
length_test.length = 2
console.log(length_test)複製代碼
這裏附平時經常使用的清空數組的操做:
// 清空數組
let empty_test = [1,2,3,4];
// 1.length = 0
empty_test.length = 0
// 2. empty_test = []
empty_test = []
// 3. splice
empty_test.splice(0)複製代碼
效率最好的是第二種,可是推薦使用第一種; 由於第二種新建了內存
prototype
......大部分的方法都是原型鏈上的方法。 具體的每一個方法會在後續一一實踐;
console.log(Array.prototype)複製代碼
靜態方法是指那些不須要對類進行實例化,使用類名就能夠直接訪問的方法,須要注意的是靜態方法不能被實例化的對象調用。靜態方法常常用來做爲工具函數。 --MDN
// Array.isArray()
const type_test = [];
const type_test1 = {};
console.log('type_test type is array? : ', Array.isArray(type_test))
console.log('type_test1 type is array? : ', Array.isArray(type_test1))複製代碼
那麼若是遇到不支持ES6語法的瀏覽器呢?
這裏實現一種更加健壯的Array檢測方法
function isArray(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}複製代碼
類數組對象(擁有一個 length 屬性和若干索引屬性的任意對象)
可遍歷對象(你能夠從它身上迭代出若干個元素的對象,好比有 Map 和 Set 等)
語法:
Array.from(arrayLike[, mapFn[, thisArg]])複製代碼
// 將可迭代對象(Set 對象)轉換成數組
Array.from(new Set(["foo", window]));
// 使用 map 函數轉換數組元素
Array.from([1, 2, 3], x => x + x); // [2, 4, 6]
// 生成一個數字序列
Array.from({length:5}, (v, k) => k); // [0, 1, 2, 3, 4]複製代碼
tips: 發現了一個小玩意
// 實現字符串反轉
let str = 'abcd'
Array.from(str).reverse().join('')複製代碼
Array.of(element0[, element1[, ...[, elementN]]])複製代碼
🌰:
Array.of(1); // [1]
Array.of(1, 2, 3); // [1, 2, 3]
Array.of(undefined); // [undefined]複製代碼
對於不支持的瀏覽器,能夠這樣作:
if (!Array.of) {
Array.of = function() {
return Array.prototype.slice.call(arguments);
};
}複製代碼
並返回數組新的長度
(length 屬性值)let sports = ["soccer", "baseball"];
let total = sports.push("football", "swimming");
console.log(sports); // ["soccer", "baseball", "football", "swimming"]
console.log(total); // 4複製代碼
tips: 用Array.pus().apply(arr1,arr2)來替代建立一個新數組。這種方法不是用來建立一個新的數組,其只是將第一個第二個數組合並在一塊兒,同時減小內存的使用:
let array1 = [1,2,3];
let array2 = [4,5,6];
console.log(array1.push.apply(array1, array2));複製代碼
而且返回這個元素
let colors = ['red', 'yellow', 'white'];
console.log(colors);
let target = myFish.pop();
console.log(colors);
console.log(target);複製代碼
.pop方法和.push成對使用,它返回數組的末尾元素並將元素從數組移除。若是數組爲空,返回void 0(undefined)。使用.push和.pop咱們能輕易模擬出LIFO(後進先出或先進後出)棧 -- 有趣的JavaScript原生數組函數
簡易棧(Stack)的實現:
function Stack () {
this._stack = []
}
Stack.prototype.next = function () {
return this._stack.pop()
}
Stack.prototype.add = function () {
return this._stack.push.apply(this._stack, arguments)
}
stack = new Stack()
stack.add(1,2,3)
stack.next()複製代碼
並返回這個元素。該方法會改變數組的長度
shift 方法移除索引爲 0 的元素(即第一個元素),並返回被移除的元素,其餘元素的索引值隨之減 1。若是 length 屬性的值爲 0 (長度爲 0),則返回 void 0(undefined)
// shift
let colors2 = ['red', 'yellow', 'white'];
console.log(colors2);
let target = colors2.shift();
console.log(colors2);
console.log(target2);複製代碼
並返回數組新的 length 值
let arr = [1, 2];
arr.unshift(0); //result of call is 3, the new array length
//arr is [0, 1, 2]複製代碼
用.unshift 和 .shift模擬FIFO(先進先出)隊列(Queue)
function Queue () {
this._queue = []
}
Queue.prototype.next = function () {
return this._queue.shift()
}
Queue.prototype.add = function () {
return this._queue.unshift.apply(this._queue, arguments)
}
queue = new Queue()
queue.add(1,2,3)
queue.next()複製代碼
本文對你有幫助?歡迎掃碼加入前端學習小組微信羣: