摘要:一定義數(shù)組是按次序排列的一組值。整個數(shù)組用方括號表示,數(shù)組的值用,分割數(shù)組的數(shù)據(jù)可以是任何類型。原數(shù)組會會變化,截取的部分自動為一個數(shù)組返回。否則,返回函數(shù)參數(shù)數(shù)組當(dāng)前項的值數(shù)組當(dāng)前項的索引數(shù)組對象本身返回值舉個例子不會改變原數(shù)組
一、定義
數(shù)組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始)。整個數(shù)組用方括號表示,數(shù)組的值用","分割;數(shù)組的數(shù)據(jù)可以是任何類型。
本質(zhì)上,數(shù)組屬于一種特殊的對象,對應(yīng)的鍵名也是字符串"0", "1", "2"。。。。
var arr = ["a", "b", "c"]; Object.keys(arr) // ["0", "1", "2"]二、獲取數(shù)組值
只能通過arr[0]的方式來獲取數(shù)組值。
因為多帶帶的數(shù)值不能作為標識符,arr.0的寫法不合法的。
var arr = [3, 4, 5, 6] console.log(arr[3]) //6 console.log(arr[4]) //undefined三、數(shù)組的基礎(chǔ)操作 1、length屬性
1)可以直接設(shè)置length長度,沒有具體數(shù)值的數(shù)組值,會以空位填充
2)人為設(shè)置length小于當(dāng)前數(shù)組長度,超過length長度的數(shù)組的成員會被刪除
清空數(shù)組的方式,設(shè)置arr.length =0
var arr = [ "a", "b", "c" ]; arr.length // 3 arr.length = 2; arr // ["a", "b"]2、in 運算符
1) 運算符in用于檢查某個鍵名是否存在,適用于對象,也適用于數(shù)組。
var arr = [ "a", "b", "c" ]; 2 in arr // true "2" in arr // true 4 in arr // false
2) 如果數(shù)組的某個位置是空位,in運算符返回false
var arr = []; arr[100] = "a"; 100 in arr // true 1 in arr // false3、push (在數(shù)組最后再添加一個元素)
arr.push("jirengu") //再數(shù)組最后添加一個元素 console.log(arr) // [3, 4, 5, 6, "hello", "jirengu"]4、pop (刪除數(shù)組最后一位并返回數(shù)值)
var value = arr.pop() //把數(shù)組最后一位彈出來,返回 console.log(value) //"jirengu"5、unshift (在數(shù)組第一位插入一個數(shù)值)
arr.unshift("ruoyu") //在數(shù)組第一位新增 console.log(arr) //["ruoyu", 3, 4, 5, 6, "hello"]6、shift(刪除數(shù)組第一位,并返回被刪除值)
var value2 = arr.shift() //把數(shù)組第一位拿出來返回,數(shù)組發(fā)生變化 console.log(value2) // "ruoyu"7、splice(替換數(shù)組的一部分,并把替換內(nèi)容作為新數(shù)組返回)
var arr2 = arr.splice(1, 2)
splice的第一個參數(shù):截斷開始的下標;splice的第二個參數(shù):截斷長度。之后的參數(shù)為替換的內(nèi)容。原數(shù)組會會變化,截取的部分自動為一個數(shù)組返回。
用途一:截斷數(shù)組
arr= [3, 4, 5, 6, "hello"] var arr2 = arr.splice(1, 2) //從下標為1的元素開始,拿出來2個元素作為一個數(shù)組返回,原數(shù)組發(fā)生改變 console.log(arr) // [3, 6, "hello"] console.log(arr2) // [4, 5]
用途二:替換數(shù)組內(nèi)容
arr= [3, 6, "hello"] arr.splice(1, 0, 8,9) //從下標為1的位置(元素6)開始,刪除0個,新增兩個元素(在6前面新增8,9) console.log(arr) //[3, 8, 9, 6, "hello"]7、slice(截取數(shù)組)
slice的第一個參數(shù):開始截斷的下標;slice的第二個參數(shù):結(jié)束截斷數(shù)組的下標(不包括這個數(shù))。原數(shù)組不會變化
arr=[3, 8, 9, 6, "hello"] var arr3 = arr.slice(2,3) //從 arr 下標為2開始,到下標為3結(jié)束(不包括3),做為新數(shù)組,原數(shù)組不變 console.log(arr3) // [9] console.log(arr) //[3, 8, 9, 6, "hello"]8、join("-")(用某個符號連接數(shù)組所有的值,生成字符串)
原數(shù)組不變
arr=[3, 8, 9, 6, "hello"] var str = arr.join("-") console.log(str) // "3-8-9-6-hello" console.log(arr.join(",")); //"3,8,9,6,hello"9、arr.concat(array) (連接兩個數(shù)組)
concat方法用于拼接數(shù)組,a.concat(b)返回一個a和b共同組成的新數(shù)組。
不會修改任何一個原始數(shù)組
var a = [1,2,3,4,5]; var b = [6,7,8,9]; console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(a); //[1, 2, 3, 4, 5] console.log(b); //[6, 7, 8, 9]10、reverse()數(shù)組逆序
用于將數(shù)組逆序,它會修改原數(shù)組
var a = [1,2,3,4,5]; a.reverse(); console.log(a); //[5, 4, 3, 2, 1]11、sort(對數(shù)組進行排序)
1)沒有參數(shù),默認根據(jù)字符串Unicode碼來排序。
var a=[5,4,3,2,1] a.sort() console.log(a) //[1, 2, 3, 4, 5]
var a=[7,8,9,10,11] a.sort() console.log(a) //[10, 11, 7, 8, 9]
2)可以自定義一個排序方式,如arr.sort([compareFunction]),比較規(guī)則如下
如果 compareFunction(a, b) 小于 0 ,那么 a 會被排列到 b 之前;
如果 compareFunction(a, b) 等于 0 , a 和 b 的相對位置不變
如果 compareFunction(a, b) 大于 0 , b 會被排列到 a 之前
或者是按照true和false來判斷,true的話就會調(diào)換位置。
3)原數(shù)組會改變
var a = [7,8,9,10,11] a.sort(function(v1,v2){ return v1-v2 }) console.log(a) //[7, 8, 9, 10, 11] var users = [ { name: "aaa", age: 21 }, { name: "baa", age: 18 }, { name: "abc", age: 24 } ] // 按age 從小到大排序 var sortByAge = users.sort(function(v1, v2){ return v1.age > v2.age }) // 按name從大到小排序 var sortByName = users.sort(function(v1, v2){ return v1.name > v2.name })四:ES5 數(shù)組拓展(注意駝峰寫法) 1、Array.isArray(arr)判斷是不是數(shù)組
這是Array對象的一個靜態(tài)函數(shù),用來判斷一個對象是不是數(shù)組
var a = []; var b = new Date(); console.log(Array.isArray(a)); //true console.log(Array.isArray(b)); //false2、indexOf(element)/ lastIndexOf(element)尋找數(shù)組是否有對應(yīng)的內(nèi)容
這兩個方法用于查找數(shù)組內(nèi)指定元素位置,查找到第一個后返回其索引,沒有查找到返回-1,indexOf從頭至尾搜索,lastIndexOf反向搜索。
var arr =[2,3,5,7,3,9] arr.indexOf(3) //13、forEach(function(element,index,arry))遍歷數(shù)組,對數(shù)組的每個元素執(zhí)行一次提供的函數(shù)
1)原理:遍歷數(shù)組,參數(shù)為一個回調(diào)callback函數(shù),回調(diào)函數(shù)有三個參數(shù):
element:數(shù)組當(dāng)前項的值
index:數(shù)組當(dāng)前項的索引(可選)
array:數(shù)組對象本身(可選)
thisArg:當(dāng)執(zhí)行回調(diào) 函數(shù)時用作this的值。如果給forEach傳遞了thisArg參數(shù),當(dāng)調(diào)用時,它將被傳給callback函數(shù),作為它的this值。否則,將會傳入 undefined 作為它的this值(可選,愛用不用)
2)注意:
數(shù)組內(nèi)已刪除或者未初始化的項不會遍歷到
返回值是:undefined,原數(shù)組會改變,這個和map和reduce不一樣
3)舉個例子
var arr=[1,2,5,6,8] arr.forEach(function(e,i,arr){ arr[i]=e*e }) console.log(arr)//?[1, 4, 25, 36, 64]4、map(function(element,index,arry))遍歷數(shù)組,對數(shù)組的每個值執(zhí)行函數(shù)操作,并把結(jié)果返回新數(shù)組
1)原理:遍歷數(shù)組,對函數(shù)的每個值執(zhí)行回調(diào)函數(shù),返回值組成一個新數(shù)組。原數(shù)組不變
2)函數(shù)參數(shù):
element:數(shù)組當(dāng)前項的值
index:數(shù)組當(dāng)前項的索引(可選)
array:數(shù)組對象本身(可選)
thisArg:執(zhí)行 callback 函數(shù)時使用的this 值(可選)
3)返回值:
一個新數(shù)組,每個元素都是回調(diào)函數(shù)的結(jié)果
4)舉個例子
var obj2 =[{ key:1,value:2}, { key:4,value:8}, { key:5,value:78}] var array= obj2.map(function(obj){ var arr2=[] arr2[obj.key] =obj.value return arr2})})5、filter(function(element,index,arry))遍歷數(shù)組,對數(shù)組每一個元素執(zhí)行callback函數(shù),并將滿足條件的值返回新數(shù)組
1)原理:遍歷數(shù)組,對數(shù)組每一個元素執(zhí)行callback函數(shù),并將滿足條件的值返回新數(shù)組。原數(shù)組不變
2)函數(shù)參數(shù):
element:數(shù)組當(dāng)前項的值
index:數(shù)組當(dāng)前項的索引(可選)
array:數(shù)組對象本身(可選)
thisArg:執(zhí)行 callback 函數(shù)時使用的this 值(可選)
3)返回值:
一個新的通過測試的元素的集合的數(shù)組,如果沒有通過測試則返回空數(shù)組
4)舉個例子
var a =[2,3,4,5,7,9,6] console.log(a.filter(function(e){ return e%2==0 })) //[2, 4, 6]
參考文獻
6、reduce(function(v1, v2), value)遍歷數(shù)組,對數(shù)組的值依次兩兩執(zhí)行回調(diào)函數(shù),將兩個數(shù)組值合成一個值,reduce從索引最小值開始1)原理:對累計器和數(shù)組中的每個元素(從左到右)應(yīng)用一個函數(shù),將其簡化為單個值。
2)函數(shù)參數(shù):
currentValue:數(shù)組中正在處理的元素
index:數(shù)組當(dāng)前項的索引(可選)
array:數(shù)組對象本身(可選)
Accumulator (累計器):累計器累計回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時返回的累積值,或initialValue(初始值)
initialValue(初始值)(可選)作為第一次調(diào)用 callback函數(shù)時的第一個參數(shù)的值。 如果沒有提供初始值,則將使用數(shù)組中的第一個元素。在沒有初始值的空數(shù)組上調(diào)用 reduce 將報錯
3)返回值:
函數(shù)累計處理的結(jié)果
4)舉個例子
var a = [1, 2, 3, 4, 5, 6] var sumvalue= a.reduce(function(v1,v2){ return v1+v2})
將二維數(shù)組轉(zhuǎn)化為一維
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( function(a, b) { return a.concat(b); }, [] ); // flattened is [0, 1, 2, 3, 4, 5]
mdn文檔
5)要點
回調(diào)函數(shù)第一次執(zhí)行時,accumulator 和currentValue的取值有兩種情況:如果調(diào)用reduce()時提供了initialValue,accumulator取值為initialValue,currentValue取數(shù)組中的第一個值;如果沒有提供 initialValue,那么accumulator取數(shù)組中的第一個值,currentValue取數(shù)組中的第二個值
1)原理:
every 方法為數(shù)組中的每個元素執(zhí)行一次 callback 函數(shù),直到它找到一個使 callback 返回 false(表示可轉(zhuǎn)換為布爾值 false 的值)的元素。如果發(fā)現(xiàn)了一個這樣的元素,every 方法將會立即返回 false。否則,callback 為每一個元素返回 true,every 就會返回 true
2)函數(shù)參數(shù):
element:數(shù)組當(dāng)前項的值
index:數(shù)組當(dāng)前項的索引(可選)
array:數(shù)組對象本身(可選)
thisArg:執(zhí)行 callback 函數(shù)時使用的this 值(可選)
3)返回值:
true/false
4)舉個例子
var a = [1, 2, 3, 4, 5, 6] console.log(a.every(function(e){ return e>0})) //true
5)every不會改變原數(shù)組 mdn
8、some(function(element, index, array))測試數(shù)組中的某些元素是否通過由提供的函數(shù)實現(xiàn)的測試1)原理:
some 為數(shù)組中的每一個元素執(zhí)行一次 callback 函數(shù),直到找到一個使得 callback 返回一個“真值”(即可轉(zhuǎn)換為布爾值 true 的值)。如果找到了這樣一個值,some 將會立即返回 true。否則,some 返回 false
2)函數(shù)參數(shù):
element:數(shù)組當(dāng)前項的值
index:數(shù)組當(dāng)前項的索引
array:數(shù)組對象本身
3)返回值:
true/false
4)舉個例子
var a = [1, 2, 3, 4, 5, 6] console.log(a.some(function(e){ return e>5})) //true
5)some不會改變原數(shù)組
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/108806.html
摘要:只有滿足才返回,否則返回。專門用于篩選出數(shù)組中符合函數(shù)判斷條件的元素組成的心數(shù)組。專門用于對原數(shù)組中每個元素執(zhí)行相同的函數(shù)對象規(guī)定的操作。并歸方法將數(shù)組從左向右迭代。 Array類型 數(shù)組的常見方法 檢測數(shù)組 如何確定當(dāng)前是一個數(shù)組,JS提供了以下幾種方式1.typeof無法檢測數(shù)組對象:typrof[]返回object2.instanceof:[]instanceof Array返回...
摘要:背景這幾天調(diào)到后臺組,搞后臺開發(fā),開發(fā)中碰到頁面拼裝到后臺的如下所示多選的數(shù)據(jù)是數(shù)組的方式,手動將數(shù)組轉(zhuǎn)換成串又嫌麻煩,后來發(fā)現(xiàn)這一神器,只需要一行代碼,就能把數(shù)組轉(zhuǎn)成。 本文僅作為個人學(xué)習(xí)總結(jié)記錄使用!能力有限,難免會有疏漏和錯誤,還望指出。共同進步。 背景 這幾天調(diào)到后臺組,搞web后臺開發(fā),開發(fā)中碰到頁面拼裝JSON到后臺的CASE 如下所示:showImg(http://se...
摘要:與其他數(shù)據(jù)結(jié)構(gòu)的互相轉(zhuǎn)換僅作為一個學(xué)習(xí)筆記供往后翻閱轉(zhuǎn)為數(shù)組轉(zhuǎn)為數(shù)組最方便的方法,就是使用擴展運算符。對象轉(zhuǎn)為轉(zhuǎn)為轉(zhuǎn)為要區(qū)分兩種情況。轉(zhuǎn)為轉(zhuǎn)為,正常情況下,所有鍵名都是字符串。這往往是數(shù)組轉(zhuǎn)為的逆操作。 Map 與其他數(shù)據(jù)結(jié)構(gòu)的互相轉(zhuǎn)換 PS:僅作為一個學(xué)習(xí)筆記供往后翻閱! (1)Map 轉(zhuǎn)為數(shù)組Map 轉(zhuǎn)為數(shù)組最方便的方法,就是使用擴展運算符(...)。 const myMap = ...
摘要:但實際中,內(nèi)部迭代器和外部迭代器兩者并無優(yōu)劣。迭代器并不只迭代數(shù)組迭代器模式不僅能迭代數(shù)組,還可以迭代一些類數(shù)組對象。晚安了,參考設(shè)計模式與開發(fā)實踐曾探本文作者本文鏈接迭代器模式設(shè)計模式與開發(fā)實踐閱讀筆記 迭代器模式:一個相對簡單的模式,目前絕大多數(shù)語言都內(nèi)置了迭代器,以至于大家都不覺得這是一種設(shè)計模式 迭代器模式 迭代器模式指提供一種方法訪問一個聚合對象中的各個元素,而又不需要暴露該...
摘要:取正值時,陰影擴大取負值時,陰影收縮。默認為,此時陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。 純JS實現(xiàn)KeyboardNav(學(xué)習(xí)筆記)一 這篇博客只是自己的學(xué)習(xí)筆記,供日后復(fù)習(xí)所用,沒有經(jīng)過精心排版,也沒有按邏輯編寫 GitHub項目源碼 預(yù)覽地址 最終效果 showImg(https://sfault-image.b0.upaiyun.com/...
摘要:取正值時,陰影擴大取負值時,陰影收縮。默認為,此時陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。 純JS實現(xiàn)KeyboardNav(學(xué)習(xí)筆記)一 這篇博客只是自己的學(xué)習(xí)筆記,供日后復(fù)習(xí)所用,沒有經(jīng)過精心排版,也沒有按邏輯編寫 GitHub項目源碼 預(yù)覽地址 最終效果 showImg(https://sfault-image.b0.upaiyun.com/...
閱讀 2722·2021-09-09 09:33
閱讀 2892·2019-08-30 15:54
閱讀 2924·2019-08-30 14:21
閱讀 2426·2019-08-29 17:15
閱讀 3639·2019-08-29 16:13
閱讀 2818·2019-08-29 14:21
閱讀 3485·2019-08-26 13:25
閱讀 2082·2019-08-26 12:14