JavaScript 數組與流程控制:從基礎操作到實戰應用

在 JavaScript 編程的世界里,數組是一種極為重要的數據結構,它就像是一個有序的 “收納盒”,能夠將多個值整齊地存儲起來。而流程控制語句則像是 “指揮官”,能夠按照特定的邏輯對數組進行遍歷和操作。接下來,就讓我們深入了解 JavaScript 數組與流程控制的相關知識。

一、數組的概念與創建?

1.1 數組的定義與特點?

數組是用于存儲多個值的有序集合,它具有以下特點:?

  • 有序:每個值都有一個索引,索引從 0 開始,就像書架上的書編號一樣,通過編號能快速找到對應的書。?
  • 異構:可以存儲不同類型的值,無論是數字、字符串,還是復雜的對象,都能被數組容納。?
  • 數組是引用類型,屬于對象的一種,這意味著在傳遞和操作數組時,實際上操作的是對數組對象的引用。?

1.2 創建數組的方式?

  • 使用字面量:這是最常用的創建數組的方式,簡潔直觀。
let arr = [1, 2, 3];
  • 使用構造函數:可以通過構造函數創建數組,有兩種常見形式。
// 常規寫法,創建包含指定元素的數組
let arr = new Array(1, 2, 3);
console.log(arr);
// 創建長度為5的空數組
let emptyArr = new Array(5);
console.log(emptyArr.length);

運行結果:

1.3 數組類型判斷?

在編程過程中,有時需要判斷一個對象是否為數組,常用的判斷方式有:?

  • 對象 instanceof Array:通過instanceof運算符判斷對象是否是Array的實例。?
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
  • Array.isArray (對象):這是 JavaScript 提供的專門用于判斷數組的方法,更加準確和便捷。?
let arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true

二、數組元素的基礎操作

2.1 數組的基本操作方法

方法描述
push(value)在數組末尾添加新元素
pop()刪除并返回數組最后一個元素
unshift(value)在數組開頭添加新元素
shift()刪除并返回數組第一個元素
slice(start, end)返回數組的一個副本(不修改原數組)
splice(index, deleteCount, items...)刪除或插入元素(修改原數組)

2.2?增加元素

末尾添加:push ():push()方法可以在數組末尾添加一個或多個元素,并返回數組新的長度。

let arr = [1, 2, 3];
let newLength = arr.push(4, 5);
console.log(arr); // [1, 2, 3, 4, 5]
console.log(newLength); // 5

開頭添加:unshift ():unshift()方法用于在數組開頭添加一個或多個元素,并返回數組新的長度。

let arr = [1, 2, 3];
let newLength = arr.unshift(0);
console.log(arr); // [0, 1, 2, 3]
console.log(newLength); // 4

指定位置添加:splice (index, count=0, 新增元素):splice()方法從指定索引位置開始,刪除count個元素(count為 0 時不刪除元素),并插入新增元素。

let arr = [1, 3, 4];
arr.splice(1, 0, 2);
console.log(arr); // [1, 2, 3, 4]

2.3?刪除元素?

末尾刪除:pop ():pop()方法用于刪除數組的最后一個元素,并返回被刪除的元素。

let arr = [1, 2, 3];
let removedElement = arr.pop();
console.log(arr); // [1, 2]
console.log(removedElement); // 3

開頭刪除:shift ():shift()方法用于刪除數組的第一個元素,并返回被刪除的元素。

let arr = [1, 2, 3];
let removedElement = arr.shift();
console.log(arr); // [2, 3]
console.log(removedElement); // 1

指定位置刪除:splice (index, count>0):從指定索引位置開始,刪除count個元素。

let arr = [1, 2, 3, 4, 5];
arr.splice(1, 2);
console.log(arr); // [1, 4, 5]

2.4?修改元素

直接通過索引賦值修改:通過數組的索引直接對元素進行重新賦值。

let arr = [1, 2, 3];
arr[1] = 10;
console.log(arr); // [1, 10, 3]

通過splice (index, count, 修改元素)修改:通過數組的索引直接對元素進行重新賦值。

let arr = [1, 2, 3];
arr.splice(1, 1, 10, 20);
console.log(arr); // [1, 10, 20, 3]

2.5?查找元素

根據索引查找:直接通過索引訪問數組元素。

let arr = [1, 2, 3];
console.log(arr[1]); // 2

查找是否存在:includes ():includes()方法用于判斷數組中是否包含指定元素,返回true或false。

let arr = [1, 2, 3];
console.log(arr.includes(2)); // true

查找索引:indexOf () /lastIndexOf ():indexOf()返回指定元素在數組中第一次出現的索引,lastIndexOf()返回指定元素在數組中最后一次出現的索引,若元素不存在則返回 -1。

let arr = [1, 2, 3, 2];
console.log(arr.indexOf(2)); // 1
console.log(arr.lastIndexOf(2)); // 3

2.5 數組切片

數組切片是指從現有數組中提取一部分元素,創建一個新數組。切片不會改變原來的數組,會創建一個新的數組,JavaScript 提供了slice()方法來實現這一功能。

語法:

arr.slice(startIndex, endIndex);
  • startIndex:開始索引(包含),若為負數則從數組末尾開始計算。
  • endIndex:結束索引(不包含),可選參數,默認為數組長度。

實例代碼:

let arr = [10, 20, 30, 40, 50];// 從索引1到索引3(不包含)
let sliced = arr.slice(1, 3);
console.log(sliced); // [20, 30]// 從索引2到末尾
let slicedToEnd = arr.slice(2);
console.log(slicedToEnd); // [30, 40, 50]// 使用負數索引
let slicedFromEnd = arr.slice(-3, -1);
console.log(slicedFromEnd); // [30, 40]

注意事項:

  1. slice()方法不會修改原數組,而是返回一個新數組。
  2. 若省略endIndex,則切片會包含從startIndex到數組末尾的所有元素。
  3. 當索引超出數組范圍時,slice()會自動處理邊界,不會拋出錯誤。

三、遍歷數組

3.1 for 循環遍歷

for循環是最基礎的遍歷方式,通過控制循環條件和索引來訪問數組的每個元素。

let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {console.log(arr[i]);
}

3.2 while 循環遍歷

while循環同樣可以實現數組的遍歷,需要手動控制索引的遞增。

let arr = [1, 2, 3, 4, 5];
let i = 0;
while (i < arr.length) {console.log(arr[i]);i++;
}

3.3 for - of 循環遍歷

for - of循環是 ES6 引入的新特性,它更加簡潔直觀,直接遍歷數組的元素值。

let arr = [1, 2, 3, 4, 5];
for (let element of arr) {console.log(element);
}

四、數組的進階用法

4.1 map 方法?

map()方法可以對數組中的每個元素進行映射轉換,生成一個新數組,原數組不會被修改。它接收一個回調函數作為參數,回調函數的返回值會組成新數組。

let numbers = [1, 2, 3, 4];
let doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8]
console.log(numbers); // [1, 2, 3, 4]

4.2 filter 方法?

filter()方法用于篩選出符合條件的元素,返回一個包含所有滿足條件元素的新數組。

let numbers = [1, 2, 3, 4];
let evenNumbers = numbers.filter(num => num % 2 === 0)
console.log(evenNumbers);
console.log(numbers);

4.3 reduce 方法?

reduce()方法能對數組元素進行累加、匯總等操作。它接收一個回調函數和一個初始值,回調函數接收四個參數(累加器、當前值、當前索引、原數組),通過不斷執行回調函數,將數組 “化簡” 為一個值。

let numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, crr) => acc + crr, 0);
console.log(sum); // 10

4.4 forEach 方法?

forEach()方法用于遍歷數組,對數組中的每個元素執行一次提供的函數,但它沒有返回值,主要用于執行一些副作用操作,如打印數組元素。

let numbers = [1, 2, 3, 4];
let fruits = ['apple', 'banana', 'cherry'];
fruits.forEach(fruit => console.log(fruit));

4.5 some 方法?

some()方法用于檢測數組中是否至少有一個元素滿足指定條件,只要有一個元素滿足條件,就返回true,否則返回false。

let numbers = [1, 2, 3, 4];
let hasEven = numbers.some(num => num % 2 === 0);
console.log(hasEven); // true

4.6 every 方法?

every()方法用于檢測數組中的所有元素是否都滿足指定條件,只有所有元素都滿足條件,才返回true,否則返回false。

let numbers = [1, 2, 3, 4];
let allPositive = numbers.every(num => num % 2 === 0);
console.log(allPositive); // true

五、綜合案例:學生成績統計

let scores = [85, 90, 78, 92, 88];
let sum = 0;
let max = scores[0];
let min = scores[0];
for (let score of scores) {sum += score;if (score > max) {max = score;}if (score < min) {min = score;}
}
let average = sum / scores.length;
console.log("平均成績:", average);
console.log("最高分:", max);
console.log("最低分:", min);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84035.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十(1). 強制類型轉換

繼第十部分C強制類型轉換的四種方式&#xff0c;再進行強化鞏固一下知識點 static_cast 最常用的&#xff0c;在指針之間做轉換 const_cast 去除常量屬性 dynamic_cast 用在基類和派生類之間的轉換 reinterpret_cast 在任意類型之間進行轉 10.1 static_cast 常見的使用場景&am…

Git版本控制工具詳解

如何區分開發環境和生產環境呢 答案就是寫不同的配置文件&#xff0c;開發的設置成開發需要的&#xff0c;生產的設置成生產需要的&#xff0c;共同放到config這個配置文件夾下面&#xff0c;開發和生成的時候分別加載不同的配置文件 方式二就是使用相同的一個入口配置文件&a…

反向傳播的核心是什么:計算損失函數對可訓練參數的梯度=== 損失函數能通過計算圖連接到可訓練參數

反向傳播的核心是什么:計算損失函數對可訓練參數的梯度 損失函數能通過計算圖連接到可訓練參數 在深度學習中,反向傳播的核心是計算損失函數對可訓練參數的梯度,從而更新這些參數。對于LLM(大型語言模型)而言,是否需要“LLM輸出的參數”才能進行反向傳播 一、反向傳播…

KINGCMS被入侵

現象會強制跳轉到 一個異常網站,請掉截圖代碼. 代碼中包含經過混淆處理的JavaScript&#xff0c;它使用了一種技術來隱藏其真實功能。代碼中使用了eval函數來執行動態生成的代碼&#xff0c;這是一種常見的技術&#xff0c;惡意腳本經常使用它來隱藏其真實目的。 這段腳本會檢…

深入探索串的高級操作:從算法到 LeetCode 實戰

串是編程中最常用的數據結構之一&#xff0c;從簡單的文本處理到復雜的文本匹配算法&#xff0c;串的應用無處不在。在掌握了串的基本概念、存儲結構以及KMP算法之后&#xff0c;現在讓我們深入探索串的更多高級操作&#xff0c;例如求子串、串的替換等&#xff0c;并通過LeetC…

在rocky linux 9.5上在線安裝 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …

OneNet + openssl + MTLL

1.OneNet 使用的教程 1.在網絡上搜索onenet&#xff0c;注冊并且登錄賬號。 2.產品服務-----物聯網服務平臺立即體驗 3.在底下找到立即體驗進去 4.產品開發------創建產品 5.關鍵是選擇MQTT&#xff0c;其他的內容自己填寫 6.這里產品以及開發完成&#xff0c;接下來就是添加設…

【Fiddler工具判斷前后端Bug】

Fiddler工具判斷前后端Bug的方法 使用Fiddler抓包工具可以高效定位問題是出在前端還是后端&#xff0c;主要通過分析請求和響應的內容、狀態碼、數據格式等關鍵信息。 分析請求是否成功發送 檢查請求是否從客戶端正確發出&#xff0c;觀察Fiddler抓取的請求列表。若請求未出…

【論文閱讀筆記】《A survey on deep learning approaches for text-to-SQL》

文章目錄 一、論文基本信息1. 文章標題2. 所屬刊物/會議3. 發表年份4. 作者列表5. 發表單位 二、摘要三、解決問題四、創新點五、自己的見解和感想六、研究背景七、研究方法&#xff08;模型、實驗數據、評估指標&#xff09;八、總結&#xff08;做了什么、得到了什么、有什么…

【強連通分量 縮點 最長路 拓撲排序】P2656 采蘑菇|普及+

本文涉及知識點 C圖論 強連通分量 縮點 最長路 拓撲排序 P2656 采蘑菇 題目描述 小胖和 ZYR 要去 ESQMS 森林采蘑菇。 ESQMS 森林間有 N N N 個小樹叢&#xff0c; M M M 條小徑&#xff0c;每條小徑都是單向的&#xff0c;連接兩個小樹叢&#xff0c;上面都有一定數量的…

Dubbo Logback 遠程調用攜帶traceid

背景 A項目有調用B項目的服務&#xff0c;A項目使用 logback 且有 MDC 方式做 traceid&#xff0c;調用B項目的時候&#xff0c;traceid 沒傳遞過期&#xff0c;導致有時候不好排查問題和鏈路追蹤 準備工作 因為使用的是 alibaba 的 dubbo 所以需要加入單獨的包 <depend…

nodejs:用 nodemailer 發送一封帶有附件的郵件

我們將使用 nodemailer 庫來發送帶有附件的郵件。 首先&#xff0c;確保已經安裝了nodemailer。如果沒有安裝&#xff0c;可以通過 npm install nodemailer 來安裝。 cnpm install nodemailer --save dependencies: – nodemailer ^7.0.3 步驟&#xff1a; 引入nodemailer模…

Scade 語言概念 - 方程(equation)

在 Scade 6 程序中自定義算子(Operator)的定義、或數據流定義(data_def)的內容中&#xff0c;包含一種基本的語言結構&#xff1a;方程(equation)(注1)。在本篇中&#xff0c;將敘述 Scade 語言方程的文法形式&#xff0c;以及作用。 注1: 對 Scade 中的 equation, 或 equation…

STM32開發,創建線程棧空間大小判斷

1. 使用RTOS提供的API函數&#xff08;以FreeRTOS為例&#xff09; 函數原型&#xff1a;UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)功能&#xff1a;獲取指定任務堆棧中剩余的最小空間&#xff08;以字為單位&#xff0c;非字節&#xff09;。使用步驟&am…

thinkphp8.1 調用巨量廣告API接口,刷新token

1、在mysql中建立表sys_token; CREATE TABLE sys_token (id int UNSIGNED NOT NULL,access_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,expires_in datetime NOT NULL,refresh_token varchar(50) COLLATE utf8mb4_general_ci NOT NULL,refresh_token_expires_in …

【leetcode】遞歸,回溯思想 + 巧妙解法-解決“N皇后”,以及“解數獨”題目

&#x1f4da;?前言 &#x1f31f; 本期內容亮點&#xff1a;我們將深入解析力扣&#xff08;LeetCode&#xff09;上的幾道經典算法題&#xff0c;涵蓋不同難度和題型&#xff0c;幫助大家掌握解題思路和代碼實現技巧。無論是準備面試還是提升算法能力&#xff0c;這些題解都…

【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越獄教程

前言 越獄iPhone之后&#xff0c;一定記得安裝一下用于屏蔽更新的描述文件&#xff08;可使用愛思助手&#xff09; 因為即便關閉了自動更新&#xff0c;iPhone仍會在某些時候自動更新系統&#xff0c;導致越獄失效&#xff1b;更為嚴重的是&#xff0c;更新后的iOS版本可能是…

??高頻通信與航天電子的材料革命:獵板PCB高端壓合基材技術解析??

—聚酰亞胺/陶瓷基板在5G與航天場景的產業化應用?? ??一、極端環境材料體系&#xff1a;突破溫域與頻率極限?? ??聚酰亞胺基板&#xff08;PI&#xff09;的航天級穩定性?? 獵板在衛星通信PCB中采用真空層壓工藝處理聚酰亞胺基材&#xff08;Dk≈10.2&#xff09;&a…

pikachu靶場通關筆記13 XSS關卡09-XSS之href輸出

目錄 一、href 1、常見取值類型 2、使用示例 3、安全風險 二、源碼分析 1、進入靶場 2、代碼審計 3、滲透思路 三、滲透實戰 1、注入payload1 2、注入payload2 3、注入payload3 本系列為通過《pikachu靶場通關筆記》的XSS關卡(共10關&#xff09;滲透集合&#xff…

day26-計算機網絡-4

1. tcp的11種狀態 ss -ant -a 表示看所有狀態 -n 表示不將ip解析為主機名 -t 表示tcp 1.1. closed狀態&#xff08;客戶端、服務端&#xff09; 客戶端發起建立連接前的狀態服務端啟動服務前的狀態 1.2. listen狀態&#xff08;服務端&#xff09; 服務端軟件運行的時候狀…