javascript
JavaScript常用内置对象之Array
數組 (Array)
1. 作用:
Array 對象用于在單個的變量中存儲多個值
2. 概念:
a.下標 -- 編號,從 0 開始,到 (長度-1) 結束,索引
b.元素 -- 數組中存放數據的空間
c.長度 -- 數組中存放數據的個數
3. 創建數組對象:
a. var array = []; // 使用直接量的方式創建b. var array = new Array(); // 使用構造函數創建// 創建的同時添加數組元素c. var array = [value1, value2, value3, ...]; d. var array = new Array(value1, value2, value3, ...);e. var array = new Array(size); // size 表示指定數組長度 復制代碼4. 引用數組元素:
數組名[下標] --> arr[0]
-- 下標以數字0開始
5. 遍歷數組元素:
a. 普通循環
for (var i = 0; i < array.length; i++) {// array[i]} 復制代碼b. for - in
for (var i in array) { // i 表示數組下標的字符串內容,比如下標為 0,那i就是"0", i 表示數組下標的字符串內容,比如下標為 0,那i就是"0"// array[i]}// 拓展:使用for - in 遍歷對象屬性for (var attrName in obj) { // attrName 表示對象屬性名var value = obj[attrName]; // obj[attrName] 表示對象屬性值} 復制代碼c. for - of
ES6 新增語法,學習可參考: developer.mozilla.org/zh-CN/docs/…
7. 常用數組API總結
length屬性 -- 獲取數組長度
push() -- 將一個或多個元素添加到數組的末尾,并返回新數組的長度。該方法和 call() 或 apply() 一起使用時,可應用在類數組的對象上。
unshift() -- 將一個或多個元素添加到數組的開頭,并返回新數組的長度。
splice() -- 指定索引處添加/刪除
// 第二個參數為0時做添加arrayObject.splice(index, 0, item1,.....,itemX)// 第二個參數不是0則做刪除arrayObject.splice(index, howmany, item1,.....,itemX) 復制代碼-- 注意:添加/刪除元素都會動態改變數組長度及數組下標
pop() -- 從數組中刪除最后一個元素,并返回該元素的值。此方法更改數組的長度。
shift() -- 從數組中刪除第一個元素,并返回該元素的值。此方法更改數組的長度。
reverse() -- 反轉,將數組中元素的位置顛倒。
sort(sortBy) -- 排序(升序,默認字符串Unicode編碼順序)。
sortBy : 可選排序函數,該函數要比較兩個值,然后返回一個用于說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
-- 若 a 小于 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小于 0 的值。
-- 若 a 等于 b,則返回 0。
-- 若 a 大于 b,則返回一個大于 0 的值。
// 簡單的栗子:升序排列數字數組function sortNumber(a,b) {return a - b;} 復制代碼concat() -- 數組連接,返回值為新數組
var arrNew = arr1.concat(arr2);
join() -- 連接數組元素,返回字符串,默認使用 ,(逗號) 連接數組元素
slice(start, end)
-- 截取 start 開始到 end 結束之間的數組元素,省略 end 表示截取到數組末尾。
-- 包括開始索引處元素,但不包括結束索引處元素。
-- start,end 也可以取負值
-- 返回新數組,不影響原數組
toString()
-- 返回一個字符串,表示指定的數組及其元素。
-- 該字符串由數組中的每個元素的 toString() 返回值經調用 join() 方法連接(由逗號隔開)組成。
8. 數組排序算法(了解):
冒泡排序
-- A. 相鄰兩個元素比較,按升序(降序)排序,如果相鄰兩個元素不滿足排序規則,則交換順序。
-- B. 會經過多輪的排序,每輪會經過多次排序,通常規則是:輪數 + 當前輪比較次數 == 元素個數
-- c. 二重循環,外層控制比較的輪數,內層控制每輪比較的次數,外層循環 N-1,內層循環 N-1-i (N表示數組長度,i表示外層循環變量,外/內層循環變量都從0開始)
for(let i = 0; i < len-1; i++){for(let j = 0; j < len-1-i; j++){if(arr[j] < arr[j+1]){var mid = arr[j+1];arr[j+1] = arr[j];arr[j] = mid;}}} 復制代碼**選擇排序插入排序快速排序順序查找二分查找......**
9. 數組ES5-ES6新增API
Array.isArray(arr)
-- 判斷 arr 是否為數組
拓展: 其他判斷 arr 是否為數組的方法
-- Object.prototype.toString.call(arr)
-- arr instanceof Array
arrayObject.forEach(callback)
-- 對數組的每個元素執行一次提供的函數
-- callback(currentValue, index, array)
currentValue : 數組中遍歷到的當前值
index : 當前值在數組中的下標
array : 調用 forEach() 方法的數組
注意: 沒有返回一個新數組! 沒有返回值!
arrayObject.map(callback)
-- 對數組的每個元素執行一次提供的函數后返回其結果。
-- 返回一個新數組,由所有返回的結果組成。
var newarr = arr1.map(callback) 復制代碼arrayObject.some(callback)
-- 測試數組中的某些元素是否通過由提供的函數實現的測試。
[2, 5, 8, 1, 4].some(function(curr){return curr 9;}) // false[2, 5, 8, 1, 4].some(function(curr){return curr 7;}) // true 復制代碼arrayObject.every(callback)
-- 測試數組的所有元素是否都通過了指定函數的測試。和some()一樣用法
arrayObject.filter(callback)
-- 返回一個新數組, 其包含通過所提供函數實現的測試的所有元素。
[2, 5, 8, 1, 4].filter(function(curr){return curr > 4;}) // [5,8] 復制代碼arrayObject.indexOf(searchElement[, fromIndex])
-- 查找數組中某元素第一次出現的索引
-- 返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。
[2, 5, 8, 1, 4].indexOf(8) // 2[2, 5, 8, 1, 4].indexOf(8,3) // -1,因為從索引 3 開始,找不到8 復制代碼arrayObject.lastIndexOf()
-- 查找數組中某元素最后一次出現的索引,不傳參數返回-1
[2,5,4,6,5,8,7,6,5].lastIndexOf(5) // 8 復制代碼arrayObject.reduce(callback,initialValue) -- 歸并
-- 對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。
-- callback(accumulator,curr,currIndex,array)
-- accumulator 累加器,累加回調的返回值; 它是上一次調用callback時返回的累積值
-- 提供初始值通常更安全
arrayObject.reduceRight() -- 從右到左
[2, 5, 8, 1, 4].reduce((a,b) => a+b) // 20 == 2 + 5 +8 + 1 + 4;[2, 5, 8, 1, 4].reduce((a,b) => a-b) // -16 == 2 - 5 - 8 - 1 -4;[2, 5, 8, 1, 4].reduce((a,b) => a*b) // 320 == 2*5*8*1*4;// 計算數組中元素出現的次數arr1.reduce(function(accumulator,curr){if(curr in accumulator)accumulator[curr]++;elseaccumulator[curr] = 1;return accumulator;},{})// 數組去重let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];let result = arr.sort().reduce((init, current)=>{if(init.length===0 || init[init.length-1]!==current){init.push(current);}return init;}, []);console.log(result); //[1,2,3,4,5]更多案例 : [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) 復制代碼Array.from()
--從一個類似數組或可迭代對象中創建一個新的數組。
-- 偽數組對象(擁有一個 length 屬性和若干索引屬性的任意對象)
-- 可迭代對象(可以獲取對象中的元素,如 Map和 Set 等)
let newArr = Array.from(arr); 復制代碼arrayObject.fill() -- 方法用一個固定值填充一個數組。
arr.fill(0)// [0,0,0,0,...]復制代碼總結
以上是生活随笔為你收集整理的JavaScript常用内置对象之Array的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj5252 [2018多省省队联测
- 下一篇: Tomcat NIO