JS筆記之快樂的數(shù)組

2021-4-9    前端達(dá)人


數(shù)組(Array)

概念:數(shù)組是一組數(shù)據(jù)的集合,其中每一個(gè)數(shù)據(jù)稱為數(shù)組元素,js的數(shù)組可以放任意數(shù)據(jù)類型的元素,數(shù)組是一種將一組數(shù)據(jù)元素存儲(chǔ)在單個(gè)變量名下的優(yōu)雅方式。

示例解釋:

//普通變量名只能存一個(gè)數(shù)據(jù) var num = 10 //數(shù)組存儲(chǔ)一組數(shù)據(jù) var arr = [1,2,3,4,5,'a','b','c'] 
  • 1
  • 2
  • 3
  • 4

一、數(shù)組的創(chuàng)建

數(shù)組的創(chuàng)建方式:
1、通過new關(guān)鍵字創(chuàng)建(不常用)

//注意A要大寫 var 數(shù)組名 = new Array() var arr = new Array()//創(chuàng)建一個(gè)空數(shù)組 var arr = new Array(5)//創(chuàng)建一個(gè)長(zhǎng)度為5的空數(shù)組 
  • 1
  • 2
  • 3
  • 4

2、通過數(shù)組字面量創(chuàng)建(常用)

//1、使用數(shù)組字面量創(chuàng)建空數(shù)組 var 數(shù)組名 = [] //2、使用數(shù)組字面量創(chuàng)建帶初始值的數(shù)組 var 數(shù)組名 = [元素1,元素2,元素3···] 如:var arr = [1,3,5,'a','c','e',7,9]//數(shù)組元素可以是任意數(shù)據(jù)類型的 
  • 1
  • 2
  • 3
  • 4
  • 5

小結(jié):
1.數(shù)組是一組數(shù)據(jù)的集合,是將一組數(shù)據(jù)存放在同一變量的優(yōu)雅方式
2.數(shù)組的字面量:[ ]
3.聲明數(shù)組并賦值稱為數(shù)組的初始化
4.數(shù)組中元素可以是任意類型的數(shù)據(jù)
5.注意:數(shù)組元素為字符或字符串要加引號(hào),不加的話解釋器會(huì)認(rèn)為是變量從而報(bào)錯(cuò)

二、數(shù)組元素的訪問

1.通過數(shù)組索引訪問

索引(下標(biāo)):用來存放數(shù)組元素的序號(hào)(數(shù)組下標(biāo)從0開始)
        我們可以通過索引來訪問、設(shè)置、修改相應(yīng)的元素,注意數(shù)組的長(zhǎng)度可以不指定,它可以隨元素的增加自動(dòng)擴(kuò)容,當(dāng)訪問未賦值的元素時(shí),返回undefined。獲取方式: 數(shù)組名[索引號(hào)]
下面通過例子來演示一下:

//定義數(shù)組 var arr = [1,3,5,'a','b','c']---->//注意字符串要加引號(hào),不然解釋器會(huì)認(rèn)為是變量而報(bào)錯(cuò) console.log(arr)---------------->Array(6)//輸出數(shù)組長(zhǎng)度 console.log(arr[0])------------->1 console.log(arr[2])------------->5 console.log(arr[4])------------->b
 console.log(arr[6])---------- -->undefined//索引下標(biāo)6沒有元素,所以返回undefined 注意:數(shù)組的下標(biāo)從0開始喲!??! 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.通過循環(huán)遍歷

請(qǐng)看下面代碼:

var arr = ["red","blue","green"] console.log(arr[0]) console.log(arr[1]) console.log(arr[2]) //輸出結(jié)果:red blue green 
  • 1
  • 2
  • 3
  • 4
  • 5

從上面代碼觀察發(fā)現(xiàn),取出每一個(gè)元素只是數(shù)組下標(biāo)改變而已,如果數(shù)組元素多的話,一行一行訪問速度很慢,為提高效率,我們可以用循環(huán)

//1、使用for循環(huán)遍歷 var arr = ["red","blue","green"] for(var i = 0;i<arr.length;i++){//length是數(shù)組的屬性,即為數(shù)組長(zhǎng)度,沒有() console.log(arr[i]) } //輸出結(jié)果:red blue green 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
//2、使用for in循環(huán)遍歷 var arr = ["red","blue","green"] for(var i in arr){ console.log(arr[i]) } //輸出結(jié)果:red blue green 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上訪問數(shù)組元素的結(jié)果是一樣的,使用循環(huán)可是很便利的
下面做兩個(gè)小案例來演示下數(shù)組的魔力吧!
案例1
使用數(shù)組對(duì)一組數(shù)求和并求平均值,思路:定義2個(gè)變量,一個(gè)存總和,一個(gè)存平均數(shù),通過遍歷數(shù)組求和,然后除以數(shù)組長(zhǎng)度求平均數(shù)

案例1實(shí)現(xiàn)代碼 //使用數(shù)組對(duì)一組數(shù)求和并求平均值 var arr = [1,3,5,7,9,2,4,6,8] //聲明一個(gè)數(shù)組并初始化 var sum = 0; //創(chuàng)建一個(gè)變量來存取各數(shù)字之和 var avg = 0; //創(chuàng)建一個(gè)變量來存取平均數(shù) for(i=0;i<arr.length;i++){ sum += arr[i]; //相當(dāng)于 sum = sum + arr[i] } console.log("sum:"+sum) //打印sum的值,即所有數(shù)的和 avg = sum/arr.length //求平均值并賦值給avg(arr.lengt是數(shù)組的個(gè)數(shù)) console.log("avg:"+avg) //打印avg的值,即所有數(shù)的平均數(shù) //輸出結(jié)果:sum:45 avg:5(這里僅是演示,沒有對(duì)結(jié)果為多位小數(shù)進(jìn)行處理) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

案例2
使用數(shù)組對(duì)一組數(shù)求最大值,圖例思路:把數(shù)組第一個(gè)元素賦值給max,依次遍歷比較,如果有元素大于max,則把此元素賦值給max,遍歷后比完max即為最大值
在這里插入圖片描述

案例2實(shí)現(xiàn) //使用數(shù)組對(duì)一組數(shù)求最大值 var arr = [1,3,5,7,9,2,4,6,8] //聲明一個(gè)數(shù)組并初始化 var max=arr[0]; //創(chuàng)建一個(gè)變量來存取最大值,把a(bǔ)rr[0],即1賦值給max for(i=01;i<arr.length;i++){ if(arr[i]>max){ max=arr[i]//判斷是否有數(shù)組元素大于max,有的話就把大于max的值賦值給max } } console.log("max:"+max) //打印max的值,即數(shù)組中最大值 //輸出結(jié)果:max:9 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

三、數(shù)組的操作

1.數(shù)組長(zhǎng)度及數(shù)組擴(kuò)容

  1. 使用length屬性獲取數(shù)組長(zhǎng)度
// 注意!length是屬性,不是函數(shù),所以不用加() var arr = [1,2,3,4,5]; console.log(arr.length) //輸出結(jié)果:5 通常數(shù)組的length屬性跟數(shù)組遍歷一起使用,使用循環(huán)遍歷數(shù)組要注意
數(shù)組元素最后一位的索引下標(biāo)是數(shù)組長(zhǎng)度-1(arr.length-1) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 使用length屬性實(shí)現(xiàn)數(shù)組擴(kuò)容
// 創(chuàng)建數(shù)組,通過length屬性擴(kuò)容數(shù)組 var arr = ['a','b','c','d']; console.log(arr.length)//輸出結(jié)果為4,數(shù)組長(zhǎng)度為4 console.log(arr[3]) //輸出數(shù)組最后一位元素的值為d arr.length=6; //數(shù)組長(zhǎng)度擴(kuò)容為6 console.log(arr) //輸出結(jié)果為6,數(shù)組長(zhǎng)度為6,第四第五個(gè)元素的值為empty console.log(arr[4]) //未賦值,默認(rèn)為undefined console.log(arr[5]) //未賦值,默認(rèn)為undefined 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

輸出結(jié)果入圖
在這里插入圖片描述
3. 通過索引號(hào)實(shí)現(xiàn)數(shù)組擴(kuò)容

// 創(chuàng)建數(shù)組,通過索引號(hào)擴(kuò)容數(shù)組 var arr = ['a','b','c','d']; console.log(arr.length)//輸出結(jié)果為4,數(shù)組長(zhǎng)度為4 console.log(arr[3]) //輸出數(shù)組最后一位元素的值為d arr[4]='A' //給第五個(gè)元素進(jìn)行賦值,因?yàn)榈?個(gè)元素沒被占用,所以會(huì)在數(shù)組后面追加元素 arr[5]='B' //給第六個(gè)元素進(jìn)行賦值 arr[10] = 'C' //給第11個(gè)元素進(jìn)行賦值 console.log(arr) console.log(arr[6]) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

運(yùn)行結(jié)果如圖,可以發(fā)現(xiàn),JS數(shù)組可以直接通過索引號(hào)進(jìn)行擴(kuò)容,而未賦值的元素默認(rèn)為empty,返回結(jié)果是undefined,如果元素不存在,則在數(shù)組后面追加元素,若已經(jīng)存在,則替換數(shù)組元素–>arr[3]

在這里插入圖片描述

注意:不要直接給數(shù)組名賦值,否則會(huì)覆蓋原有數(shù)組!

// 演示 var arr=[1,2,3,4,5] console.log(arr)//打印原數(shù)組 arr="有點(diǎn)意思!" console.log(arr) 
  • 1
  • 2
  • 3
  • 4
  • 5

在這里插入圖片描述


2.數(shù)組的常用方法

 1. shift()刪除數(shù)組中的第一個(gè)元素并且返回被刪除的元素,
    同時(shí)其他元素的索引向前移動(dòng)一位 
  • 1
  • 2
var fruits = ['banana', 'orange', 'apple', 'mango'] console.log(fruits) //打印原數(shù)組 var x = fruits.shift(); //首元素刪除 console.log(fruits) //刪除后的數(shù)組,數(shù)組元素向前索引移動(dòng)一位 console.log(x) //打印被刪除元素的值banana 
  • 1
  • 2
  • 3
  • 4
  • 5

結(jié)果如圖:
在這里插入圖片描述

 2. pop()刪除數(shù)組中的最后一個(gè)元素并且返回被刪除的元素 
  • 1
var fruits = ['banana', 'orange', 'apple', 'mango'] console.log(fruits) //打印原數(shù)組 var x = fruits.pop(); //末尾元素刪除 console.log(fruits) //刪除后的數(shù)組 console.log(x) //打印被刪除元素的值mango 
  • 1
  • 2
  • 3
  • 4
  • 5

結(jié)果如圖:
在這里插入圖片描述

 3. unshift(參數(shù)1,參數(shù)2···)向數(shù)組的開頭添加一個(gè)或者更多的元素并且返回新的長(zhǎng)度,
    同時(shí)數(shù)組元素的索引向后移動(dòng) 
  • 1
  • 2
var fruits = ['orange', 'apple', 'mango'] console.log(fruits) //打印原數(shù)組 var x = fruits.unshift('banana'); //添加后返回?cái)?shù)組長(zhǎng)度 console.log(fruits) //添加后的數(shù)組 console.log(x) //打印新數(shù)組的總長(zhǎng)度 
  • 1
  • 2
  • 3
  • 4
  • 5

結(jié)果如圖:
在這里插入圖片描述

 4. push()向數(shù)組末尾增添一個(gè)或者多個(gè)數(shù)組元素,并且返回?cái)?shù)組的長(zhǎng)度 
  • 1
var fruits = ['orange', 'apple', 'mango'] console.log(fruits) //打印原數(shù)組 var x = fruits.push('banana'); //添加一個(gè)數(shù)后返回?cái)?shù)組長(zhǎng)度 console.log(fruits) //添加一個(gè)元素后的數(shù)組 console.log(x) //打印添加一個(gè)數(shù)后新數(shù)組的總長(zhǎng)度 var x = fruits.push('pineapple','strawberry');//添加多個(gè)元素后返回?cái)?shù)組長(zhǎng)度 console.log(fruits) //添加多個(gè)元素后的數(shù)組 console.log(x) //添加多個(gè)元素后的總長(zhǎng)度 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

結(jié)果如圖
在這里插入圖片描述

 5. reverse()翻轉(zhuǎn)數(shù)組 
  • 1
 var fruits = ['orange', 'apple', 'mango'] console.log(fruits); //打印原數(shù)組 console.log(fruits.reverse()) //打印翻轉(zhuǎn)后的數(shù)組 
  • 1
  • 2
  • 3

結(jié)果如圖:
在這里插入圖片描述
6. sort()數(shù)組排序,對(duì)字符串排序,比較的是ASCII碼的順序

 1>如["a", "A", "1"], 按ASCII碼順序排列后為["1", "A", "a"](數(shù)字>大寫字母>小寫字母)
 2>如["ab", "ac", "abc"], 排序后為["ab", "abc", "ac"]
 3>字符串?dāng)?shù)字:如["10", "5", "18" , "50"], 排序后為["10", "18", "5", "50"]
 比較方法:
(第一位相同比較第二位,b>c,因此ab和abc在ac之前;再比較ab與abc, ab沒有第三位,因此排在abc之前)!!!

如需要對(duì)字符串形式的數(shù)字進(jìn)行排序,可以采用以下兩種方式:
    1、統(tǒng)一格式,補(bǔ)足位數(shù),如["10", "5", "18" , "50"]中, 將"5"寫為"05"
    2、轉(zhuǎn)換為數(shù)字,使用特殊方法對(duì)數(shù)字排序 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
 var arr1 = ["a", "A", "1"] var arr2 = ["ab", "ac", "abc"] var arr3 = ["10", "5", "18", "50"] var arr4 = ["10", "05", "18", "50"] console.log(arr1.sort()); console.log(arr2.sort()); //比較方法:按ASCII碼比較排序  console.log(arr3.sort()); console.log("數(shù)字排序(5改成'05'):" + arr4.sort()); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

結(jié)果如圖:
在這里插入圖片描述

3.拓展:數(shù)字排序

1、匿名函數(shù)當(dāng)做參數(shù)使用數(shù)組排序(一維數(shù)組)

//語(yǔ)法格式:
arr.sort ( function (a, b) {   //arr為需要排序的數(shù)組名
    return a - b               //升序
})  
根據(jù)比較函數(shù)返回值正負(fù)來決定排列順序,為正升序,為負(fù)降序
使用如下: 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
 function sortby(a, b) { return a - b //升序 } //降序就改成return b-a var arr = [10, 5, 8, 50]; arr.sort(sortby)//把排序匿名函數(shù)當(dāng)做參數(shù)進(jìn)行調(diào)用 console.log(arr);//輸出排序后的結(jié)果 //匿名函數(shù)的函數(shù)名任意 結(jié)果如圖: 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在這里插入圖片描述

2、匿名函數(shù)當(dāng)做參數(shù)使用數(shù)組排序(二維數(shù)組)

//語(yǔ)法格式:
arr.sort (function (a, b) {   //arr為需要排序的數(shù)組名
    return a[1] - b [1]      //升序,降序改為b[1]-a[1]
})  
使用如下: 
  • 1
  • 2
  • 3
  • 4
  • 5
 function sortby(a, b) { return a[1] - b[1] //升序 } //降序就改成return b-a var arr = [["Alice", "95"], ["Bob", "80"], ["Cart", "100"]] arr.sort(sortby)//把排序匿名函數(shù)當(dāng)做參數(shù)進(jìn)行調(diào)用 console.log(arr);//輸出排序后的結(jié)果 //匿名函數(shù)的函數(shù)名任意 結(jié)果如圖: 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在這里插入圖片描述

3.拓展:數(shù)組篩選(巧用length屬性)

將數(shù)組[2,4,5,6,8,9,12,15,3,7,26,14]中大于10的元素存入新數(shù)組
//分析:
    1、創(chuàng)建一個(gè)數(shù)組arr=[2,4,5,6,8,9,12,15,3,7,26,14]
    2、創(chuàng)建一個(gè)新數(shù)組newArr來存放大于10的元素
    3、遍歷舊數(shù)組,找出大于10的元素
    4、依次添加到新數(shù)組中 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
// 方法1,通過變量來增加數(shù)組長(zhǎng)度 var arr = [2,4,5,6,8,9,12,15,3,7,26,14] //創(chuàng)建一個(gè)數(shù)組 var newArr=[] //創(chuàng)建空的新數(shù)組,用于存放大于10的元素 var j =0 ; //定義變量,用于增加新數(shù)組的長(zhǎng)度 for(var i = 0 ;i<arr.length;i++){ //for循環(huán)遍歷數(shù)組 if(arr[i]>10){ //判斷數(shù)組元素是否大于10 newArr[j]=arr[i] //如果arr數(shù)組元素>10,則存入新數(shù)組 j++; //當(dāng)存入元素,長(zhǎng)度+1,即j++ } } console.log(newArr)//打印新數(shù)組 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
// 方法2,巧用length屬性 var arr = [2,4,5,6,8,9,12,15,3,7,26,14] //創(chuàng)建一個(gè)數(shù)組 var newArr=[] //創(chuàng)建空的新數(shù)組,用于存放大于10的元素 for(var i = 0 ;i<arr.length;i++){ //for循環(huán)遍歷數(shù)組 if(arr[i]>10){ //判斷數(shù)組元素是否大于10 newArr[newArr.length]=arr[i]//如果arr數(shù)組元素>10,則存入新數(shù)組 } //巧用length屬性,數(shù)組索引從0開始增加 } console.log(newArr)//打印新數(shù)組 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

結(jié)果如圖:
在這里插入圖片描述

四、二維數(shù)組

概念:二維數(shù)組就是一維數(shù)組的每個(gè)元素是一個(gè)一維數(shù)組

1.二維數(shù)組的創(chuàng)建與訪問

// 創(chuàng)建與訪問 
  • 1
var fruits = [["1", "Banana"], ["2", "Orange"]];//創(chuàng)建二維數(shù)組 var element = ["3", "Apple"]; fruits[2] = element; //給第三個(gè)元素賦值 console.log(fruits); //打印二維數(shù)組 console.log(fruits[0]); // ["1", "Banana"]//打印第一個(gè)元素(數(shù)組) console.log(fruits[0][1]); // "Banana"   //打印第一個(gè)元素的第2個(gè)值 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

結(jié)果如圖:
在這里插入圖片描述

2.遍歷二維數(shù)組

通過for in循環(huán)遍歷二維數(shù)組

var fruits = [["1", "Banana"], ["2", "Orange"], ["3", "Apple"]]; for (var i in fruits) {//控制外層數(shù)組元素 for (var j in fruits[i]) {//控制內(nèi)層數(shù)組元素 console.log(fruits[i][j]);//輸出數(shù)值中每一個(gè)元素 } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

結(jié)果如圖:
在這里插入圖片描述
小結(jié):二維數(shù)組跟一維數(shù)組使用差不多,只是稍微麻煩一點(diǎn),訪問二維數(shù)組的具體元素值:arr[外層數(shù)組索引][內(nèi)層數(shù)組索引]
遍歷二維數(shù)組使用雙重for循環(huán)

3.使用二維數(shù)組進(jìn)行排序(冒泡排序法)

圖例解釋:
在這里插入圖片描述

//代碼實(shí)現(xiàn)如下 var arr = [5,4,3,2,1]; for (var i = 0; i < arr.length - 1; i++) {//外層循環(huán)控制交換趟數(shù),趟數(shù)為數(shù)組長(zhǎng)度-1 for (var j = 0; j < arr.length - 1 - i; j++) {//內(nèi)層循環(huán)控制每一趟需要交換的次數(shù) if (arr[j] > arr[j + 1]) {//判斷前面一個(gè)數(shù)是否大于后面一個(gè)數(shù),如果是則交換兩數(shù) var temp = arr[j];//臨時(shí)變量,用于交換兩數(shù)的臨時(shí)存取 arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } console.log(arr);//輸出排序后的結(jié)果 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

結(jié)果如圖:
在這里插入圖片描述

總結(jié)

本次筆記主要記錄了數(shù)組的基本使用,但是數(shù)組的妙用遠(yuǎn)不止這些,需要我們自己去探索。


轉(zhuǎn)自:csdn論壇 作者:想要搞錢

藍(lán)藍(lán)設(shè)計(jì)www.bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 、平面設(shè)計(jì)服務(wù)


分享本文至:

日歷

鏈接

個(gè)人資料

存檔