循環(huán)練習
- 跳轉語句
- break語句
- continue語句
- 數(shù)組
- 創(chuàng)建數(shù)組
- 數(shù)組字面量法
- 擴展操作符
- 讀寫數(shù)組元素
- 稀疏數(shù)組
- 數(shù)組長度
- 添加和刪除數(shù)組元素
- 刪除數(shù)組元素
- 遍歷數(shù)組
- 多維數(shù)組
- 數(shù)組方法
- 類數(shù)組對象
- 作為數(shù)組的字符串
- 作業(yè)
- 錄制視頻講解splice()方法的使用方法
- 錄制視頻講解數(shù)組去重:[8,3,2,6,4,4,6,2,8]
- 錄制視頻講解數(shù)組冒泡排序: [5,4,3,2,1]
- 編程:翻轉數(shù)組 [-6,-4,-2,0,2,4,6] => [6,4,2,0,-2,-4,-6]
- 編程:已知數(shù)組[22,0,33,0,44,0,55] 。創(chuàng)建一個新數(shù)組,把已知數(shù)組中的非0元素存儲到新數(shù)組中迂曲。
循環(huán)練習
示例:假設銀行的存款利率為2.75%,請問1000塊錢需要存多少年才能變?yōu)?000塊拴签?
let money = 1000
let count = 0
while (money < 5000 ){
money *= 1.025
count++
}
console.log(count)
示例:請打印100以內(nèi)所有的質(zhì)數(shù)抱环。
console.time("zhishu");
for (let i = 2; i < 100; i++) {
let zhishu = true;
for (let j = 2; j <= i ** 0.5; j++) {
if (i % j === 0) {
zhishu = false;
break; //優(yōu)化
}
}
if (zhishu) {
console.log(i);
}
}
console.timeEnd("zhishu"); //優(yōu)化
跳轉語句
跳轉語句會導致js解析器跳轉到源代碼中的新為止盈电。
- break語句:讓解析器跳出循環(huán)或switch
- continue語句:讓解析器跳過當次循環(huán)并跳轉到循環(huán)表達式拇砰,開始新一輪迭代
- return語句:讓解析器從函數(shù)調(diào)用跳轉會調(diào)用位置咖熟,通知提供調(diào)用返回值
- yield語句:生成器函數(shù)中返回的語句
- throw語句會拋出異常,與try/catch/finally語句共同使用
break語句
語法:
//語法1
break;
//語法2
break labelname;
用法1:立刻退出循環(huán)
for(let i=0;i<10;i++){
if(i === 3) break //012
document.write(i)
}
用法2:立刻退出switch語句
let str = '蘋果'
switch (str) {
case '蘋果':
document.write('蘋果3.5元/斤')
break
case '獼猴桃':
document.write('獼猴桃4.5元/斤')
break
case '西瓜':
document.write('西瓜5.5元/斤')
break
default:
document.write('找不到您查找的水果')
}
用法3:只影響當前for循環(huán)
for(let i=0;i<10;i++){
console.log('====外循環(huán)====' + i)
for(let j=0;j<5;j++){
if(j===2) break
console.log('內(nèi)循環(huán)' + j)
}
}
continue語句
語法:
//語法1
continue;
//語法2
continue labelname;
用法1:
for(let i=0;i<10;i++){
if(i === 3) continue //012456789
document.write(i)
}
示例:找出1000以內(nèi)所有的質(zhì)數(shù)胃惜。
for (let i = 2; i < 100; i++) {
let zhishu = true
for (let j = 2; j < i; j++) {
if ( i % j === 0) {
zhishu = false
}
}
if(zhishu) {
console.log(i)
}
}
數(shù)組
定義
數(shù)組是值的有序集合。
- 數(shù)組是編程語言的一種基礎數(shù)據(jù)類型哪雕。
- 數(shù)組元素:數(shù)組的值被稱為數(shù)組元素船殉。
- 索引:每個數(shù)組元素有一個數(shù)值表示位置,叫做索引斯嚎。
- js的數(shù)組元素可以是任意類型的值利虫。
創(chuàng)建數(shù)組
創(chuàng)建數(shù)組有幾種方式:
- 數(shù)組字面量法
- Array()構造函數(shù)
- ...
- 工廠方法
數(shù)組字面量法
數(shù)組字面量就是使用方括號包裹的數(shù)組元素,元素之間使用逗號分隔堡僻。
let empty = [] //空數(shù)組
let arr1 = [2,3,4,5,7,11] //有5個數(shù)值元素的數(shù)組
let arr2 = [1.1, true, 'a',]//3種不同類型的元素
數(shù)組元素可以是常量列吼,也可以是變量
let num = 1
let table = [num,num+1,num+2,num+3]
擴展操作符
擴展操作符: ...
(實際并不屬于操作符)
用法1:擴展操作符允許在一個數(shù)組字面量種包含另一個數(shù)組元素。
let a = [1,2,3]
let b = [0,...a,4] // b == [0,1,2,3,4]
- 這里的三個點會擴展數(shù)組a。
-
...a
代表數(shù)組a的所有元素咨油。
用法2:用于快速賦值數(shù)組
let a = [1,2,3]
let b = [...a] //[1,2,3]
b[0] = 0 //不會影響數(shù)組a
a[0]//1
用法3:用于把字符串轉數(shù)組
let str = 'hello'
let arr = [...str]
console.log(arr)
讀寫數(shù)組元素
使用[]
讀寫數(shù)組元素
let arr = ['蘋果','桔子','西瓜','榴蓮','火龍果','牛油果']
arr[0] //'蘋果'
arr[1] = '荔枝'
arr[1] //'荔枝'
稀疏數(shù)組
密集數(shù)組中的元素都是從索引 0 開始順序排列的棉胀。數(shù)組的長度屬性準確地指定了數(shù)組中元素的數(shù)量霎挟。
稀疏數(shù)組就是元素不連續(xù)的數(shù)組,它們并不總是從 0 開始脊奋。它們本質(zhì)上是帶有“孔”的。數(shù)組的長度屬性會準確返回數(shù)組中元素的數(shù)量整份,但在稀疏數(shù)組中則不會。
let arr = []
arr[2] = 'hello'
console.log(arr.length) //3 實際只有一個數(shù)組元素
產(chǎn)生稀疏數(shù)組的情況
- new Array()
- delete刪除符
數(shù)組長度
Array.length 返回數(shù)組的長度瓜客,也就是數(shù)組元素的數(shù)量否彩。
用法1:查詢數(shù)組長度
let arr = [1,2,3,4,5]
arr.length
用法2:查詢最后一個數(shù)組元素
arr[arr.length - 1]
用法3:刪除數(shù)組元素
arr.length = 3
用法4: 創(chuàng)建稀疏數(shù)組
arr.length = 10
arr // [1,2,3,4,5,,,,,]
添加和刪除數(shù)組元素
方法1:使用索引賦值
let arr = [1,2,3]
arr[arr.length] = 4
方法2:使用push方法
方法3:使用unshift()方法
刪除數(shù)組元素
方法1:pop方法
方法2:shift方法
方法3:delete方法
let arr = [3, 1, 4, 1, 5];
console.log("1" in arr);
delete arr[1]; //delete刪除的是數(shù)組元素,刪除后索引位置還在
console.log("1" in arr);
arr.length // => 3 不影響數(shù)組長度
let obj = { x: 1, y: 2 };
console.log("x" in obj);
delete obj.x; //delete刪除的是屬性,刪除后就屬性就不存在了蜻直。
console.log("x" in obj);
方法4: length屬性
let arr = [1,2,3]
arr.length = 2 // [1,2]
方法5: splice()方法
定義
Array.slpice()
方法用于修改數(shù)組。修改包括:
- 增加數(shù)組元素
- 刪除數(shù)組元素
- 替換數(shù)組元素
語法
splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2, itemN)
splice(參數(shù)1,參數(shù)2,參數(shù)3)//1:刪除數(shù)組的起始位置
splice(1,2)//2:刪除數(shù)組元素的數(shù)量
splice(1,2,'a','b','c')//'a':要添加的元素
splcie(1,0,'b','c')//0:要做添加的操作,而不刪除任何元素
- 參數(shù)1:刪除的元素位置
- 參數(shù)2:刪除的元素數(shù)量
- 參數(shù)3:添加的元素
- 參數(shù)2是0:表示刪除0個
說明
- start:修改操作的起始位置
- start === -1 => 從數(shù)組末尾倒序計算
- start > -array.length || 不寫start => start = 0
- start >= array.length乡范,則不會刪除任何元素
- deleteCount: 刪除的數(shù)組元素的數(shù)量
- 如果省略deleteCount,或者其值大于或等于start指定位置之后的元素個數(shù)瓶佳,則刪除從start到數(shù)組末尾的所有元素为朋。
- 如果 deleteCount 為 0 或負數(shù),則不會刪除任何元素
- item: 添加的新數(shù)組元素霞溪。
- 如果不指定任何元素,splice() 將只從數(shù)組中刪除元素殴蓬。
返回值
- 包含已刪除元素的數(shù)組。
- 如果沒有刪除任何元素,則返回一個空數(shù)組散庶。
示例:splice()
const fruits = ["蘋果", "香蕉", "西瓜", "橘子"];
let removed = fruits.splice(2, 0, "榴蓮"); //返回[]
removed = fruits.splice(2, 1, "菠蘿");
console.log(removed);
console.log(fruits);
示例:數(shù)組去重[3, 7, 9, 1, 3, 2, 1, 1, 7]
let arr = [3, 7, 9, 1, 3, 2, 1, 1, 7];
//推理過程
// let i = 0
// for(let j = i + 1;j<arr.length;j++){
// if(arr[i] === arr[j]) {
// arr.splice(j,1)
// }
// }
// let i = 1
// for(let j = i + 1;j<arr.length;j++){
// if(arr[i] === arr[j]) {
// arr.splice(j,1)
// }
// }
for (let i = 0; i < arr.length; i++) {
//循環(huán)元素
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
//比較值:第一個等同于第二個蕉堰,splice方法刪除第二個
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);
示例:冒泡排序
// 冒泡,相鄰元素之間比較
let arr = [57, 68, 59, 52, 72, 28, 96, 33, 24, 19];
// for (let i = 0; i < arr.length - 1; i++) {
// for (let j = 0; j < arr.length - 1 - i; j++) {
// if (arr[j] > arr[j + 1]) {
// let temp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = temp;
// }
// }
// }
//推理1:需要第三個瓶子存儲大值
// let j = 0
// if(arr[j] > arr[j + 1]){
// let temp = arr[j]
// arr[j] = arr[j + 1]
// arr[j+1] = temp
// }
// j++
// if(arr[j] > arr[j + 1]){
// let temp = arr[j]
// arr[j] = arr[j + 1]
// arr[j+1] = temp
// }
// j++
// if(arr[j] > arr[j + 1]){
// let temp = arr[j]
// arr[j] = arr[j + 1]
// arr[j+1] = temp
// }
// j++
// if(arr[j] > arr[j + 1]){
// let temp = arr[j]
// arr[j] = arr[j + 1]
// arr[j+1] = temp
// }
//推理2:需要一個for循環(huán)做
// for (let j = 0; j < arr.length - 1; j++) {
// if (arr[j] > arr[j + 1]) {
// let temp = arr[j]
// arr[j] = arr[j + 1]
// arr[j + 1] = temp
// }
// }
//推理3:需要一個for循環(huán)控制輪次
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
遍歷數(shù)組
方法1:使用for循環(huán)遍歷數(shù)組
遍歷數(shù)組:從前向后
let arr = [1,2,3,4,5]
for(let i=0;i<arr.length;i++)
{
console.log(arr[i])
}
遍歷數(shù)組:從后向前
let arr = [1,2,3,4,5]
for(let i=arr.length-1;i>=0;i--)
{
console.log(arr[i])
}
遍歷數(shù)組:隔一個遍歷
let arr = [1,2,3,4,5]
for(let i=0;i<arr.length;i+=2)
{
console.log(arr[i])
}
練習:以數(shù)組形式返回所有大于等于18的數(shù)組元素悲龟。
let arr = [30, 18, 20, 10, 40, 17, 19, 50, 60];
let arr2 = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= 18) {
arr2.push(arr[i]);
}
}
console.log(arr2);
方法2: 使用for/in遍歷數(shù)組
let arr2 = [1,2,3,4,5]
for(let attr in arr2){
console.log(attr)//{'0':1,'1':2,}輸出的是字符串屬性名
console.log(arr2[attr]) //輸出的是數(shù)組元素
}
示例:拼接字符串
let arr = [...'Hello world']
let str = ''
for(let element of arr){
str += element
}
str // => 'Hello world'
方法3: 使用for/of遍歷數(shù)組
let arr = [...'Hello world']
let str = ''
for(let element of arr){
str += element
}
str // => 'Hello world'
稀疏數(shù)組:
for(let i = 0; i< arr.length; i++){
if (a[i] === undefined) continue //跳過未定義及不存在的元素
//循環(huán)體
}
方法3:forEach()
方法4:map()
方法5:filter()