JavaScript中各種對(duì)象遍歷方法總結(jié)
1.forEach方法
forEach是javaScrip中數(shù)組(Array)的一個(gè)內(nèi)置方法,用于遍歷數(shù)組中的每個(gè)元素并執(zhí)行回調(diào)函數(shù)。
array.forEach(function(currentValue, index, array) {
// 執(zhí)行的操作
}, thisArg);參數(shù)說明:
currentValue:當(dāng)前處理的數(shù)組元素(必需)index:當(dāng)前元素的索引(可選)array:正在操作的數(shù)組本身(可選)thisArg:執(zhí)行回調(diào)時(shí)用作this的值(可選)
基本用法示例
const fruits = ['apple', 'banana', 'orange'];
// 簡(jiǎn)單遍歷
fruits.forEach(function(fruit) {
console.log(fruit);
});
// 輸出: apple, banana, orange
// 帶索引的遍歷
fruits.forEach(function(fruit, index) {
console.log(index + ': ' + fruit);
});
// 輸出: 0: apple, 1: banana, 2: orange箭頭函數(shù)寫法
fruits.forEach((fruit,index)) =>{
console.log(${index+1}: ${fruit});
}特點(diǎn)與注意事項(xiàng)
不會(huì)改變?cè)瓟?shù)組(除非在回調(diào)中手動(dòng)修改)
const numbers = [1, 2, 3]; numbers.forEach(num => num * 2); // 原數(shù)組不變 console.log(numbers); // [1, 2, 3]
沒有返回值(返回undefined)
const result = [1, 2, 3].forEach(num => num * 2); console.log(result); // undefined
無法中途跳出循環(huán)(不能使用break或return)
// 這樣不會(huì)停止循環(huán)
[1, 2, 3].forEach(num => {
if (num === 2) return; // 只是跳過當(dāng)前迭代
console.log(num);
});會(huì)跳過空位
[1, , 3].forEach(num => console.log(num)); // 輸出: 1, 3

適用場(chǎng)景
需要對(duì)數(shù)組每個(gè)元素執(zhí)行相同操作
不需要中途退出循環(huán)
代碼可讀性優(yōu)先于性能
不適用場(chǎng)景
需要根據(jù)條件提前終止循環(huán)(改用
for或some/every)需要返回新數(shù)組(改用
map)需要過濾數(shù)組(改用
filter)
2.map--數(shù)組映射轉(zhuǎn)換
map是JavaScript 數(shù)組的高階函數(shù),用于處理數(shù)組并返回新數(shù)組。而我們的forEach不會(huì)返回新數(shù)組。map()方法會(huì)創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是原數(shù)組的每個(gè)元素調(diào)用一次提供的函數(shù)返回值。
const newArray = arr.map(function(currentValue, index, array) {
// 返回處理后的元素
}, thisArg);特點(diǎn)
返回新數(shù)組(不修改原數(shù)組)
新數(shù)組長(zhǎng)度與原數(shù)組相同
用于數(shù)據(jù)轉(zhuǎn)換/格式化
const numbers = [1, 2, 3];
// 所有元素乘以2
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6]
// 轉(zhuǎn)換為對(duì)象數(shù)組
const objects = numbers.map(num => ({ value: num }));
console.log(objects); // [{value: 1}, {value: 2}, {value: 3}]實(shí)際應(yīng)用場(chǎng)景
API數(shù)據(jù)格式化
渲染列表前的數(shù)據(jù)準(zhǔn)備
數(shù)值計(jì)算轉(zhuǎn)換
3.filter---數(shù)組過濾
基本概念:filter()方法會(huì)創(chuàng)建一個(gè)新數(shù)組,包含通過所提供的函數(shù)測(cè)試的所有元素。
const newArray = arr.filter(function(currentValue, index, array) {
// 返回true保留元素,false過濾元素
}, thisArg);何時(shí)選擇
特點(diǎn)
返回新數(shù)組(不修改原數(shù)組)
新數(shù)組長(zhǎng)度 ≤ 原數(shù)組長(zhǎng)度
用于數(shù)據(jù)篩選
const numbers = [1, 2, 3, 4, 5]; // 過濾偶數(shù) const evens = numbers.filter(num => num % 2 === 0); console.log(evens); // [2, 4] // 過濾長(zhǎng)度大于3的字符串 const words = ['apple', 'banana', 'pear']; const longWords = words.filter(word => word.length > 4); console.log(longWords); // ['banana']
實(shí)際應(yīng)用場(chǎng)景
搜索/篩選功能
數(shù)據(jù)清理(去除無效數(shù)據(jù))
權(quán)限過濾

注意事項(xiàng)
不修改原數(shù)組:兩者都返回新數(shù)組,不影響原數(shù)組
性能考慮:大數(shù)據(jù)量時(shí),鏈?zhǔn)秸{(diào)用多個(gè)方法可能影響性能
需要轉(zhuǎn)換數(shù)據(jù)格式 → 用
map需要篩選數(shù)據(jù)子集 → 用
filter需要先篩選再轉(zhuǎn)換 → 鏈?zhǔn)秸{(diào)用
filter().map()空位處理:
map會(huì)保留空位,filter會(huì)跳過空位異步問題:回調(diào)函數(shù)中使用異步代碼需要特別處理
4.for...of循環(huán)
基本概念:for...of 是 ES6 引入的循環(huán)語法,用于遍歷可迭代對(duì)象(如 Array、String、Map、Set 等)
for (const element of iterable) {
// 執(zhí)行操作
}特點(diǎn)
可遍歷任何可迭代對(duì)象(實(shí)現(xiàn)了
[Symbol.iterator]方法的對(duì)象)可以直接獲取元素值(不需要通過索引)
可以使用
break和continue控制循環(huán)不提供索引(需要索引時(shí)可結(jié)合
entries())
const fruits = ['apple', 'banana', 'orange'];
// 基本用法
for (const fruit of fruits) {
console.log(fruit);
}
// 帶索引的遍歷
for (const [index, fruit] of fruits.entries()) {
console.log(index, fruit);
}
// 可提前終止
for (const fruit of fruits) {
if (fruit === 'banana') break;
console.log(fruit); // 只輸出 'apple'
}與forEach的區(qū)別
for...of可以使用break/continuefor...of可以遍歷任何可迭代對(duì)象,而forEach只是數(shù)組方法for...of性能通常比forEach更好
5.some方法
基本概念:some()測(cè)試數(shù)組中是否至少有一個(gè)元素通過了提供的函數(shù)測(cè)試。
array.some(function(currentValue, index, array) {
// 返回布爾值
}, thisArg);特點(diǎn)
返回布爾值(true/false)
遇到第一個(gè)返回 true 的元素就停止遍歷
空數(shù)組調(diào)用始終返回 false
不修改原數(shù)組
const numbers = [1, 2, 3, 4, 5]; // 檢查是否有偶數(shù) const hasEven = numbers.some(num => num % 2 === 0); console.log(hasEven); // true // 檢查是否有大于10的數(shù) const hasLargeNumber = numbers.some(num => num > 10); console.log(hasLargeNumber); // false
實(shí)際應(yīng)用
權(quán)限檢查(是否有某項(xiàng)權(quán)限)
表單驗(yàn)證(是否有無效字段)
搜索(是否存在匹配項(xiàng))
6.every方法
基本概念:every()測(cè)試數(shù)組中的所有元素是否都通過了提供的函數(shù)測(cè)試。
array.every(function(currentValue, index, array) {
// 返回布爾值
}, thisArg);特點(diǎn)
返回布爾值(true/false)
遇到第一個(gè)返回 false 的元素就停止遍歷
空數(shù)組調(diào)用始終返回 true(空真規(guī)則)
不修改原數(shù)組
const numbers = [2, 4, 6, 8, 10]; // 檢查是否都是偶數(shù) const allEven = numbers.every(num => num % 2 === 0); console.log(allEven); // true // 檢查是否都小于5 const allSmall = numbers.every(num => num < 5); console.log(allSmall); // false (6不小于5)
實(shí)際應(yīng)用
表單驗(yàn)證(所有字段是否有效)
權(quán)限檢查(是否具備所有權(quán)限)
數(shù)據(jù)完整性檢查

JavaScript 數(shù)組遍歷方法對(duì)比表
| 方法 | 返回值 | 是否修改原數(shù)組 | 能否中斷循環(huán) | 空數(shù)組處理 | 主要用途 | 性能特點(diǎn) |
|---|---|---|---|---|---|---|
| forEach | undefined | 否 | 否 | 跳過空位 | 遍歷執(zhí)行操作 | 中等,最通用 |
| map | 新數(shù)組 | 否 | 否 | 保留空位 | 數(shù)據(jù)轉(zhuǎn)換/映射 | 稍慢,需處理所有元素 |
| filter | 新數(shù)組 | 否 | 否 | 跳過空位 | 數(shù)據(jù)篩選 | 中等,可能提前結(jié)束 |
| for...of | 無 | 可手動(dòng)修改 | 可(break) | 不執(zhí)行 | 通用遍歷 | 較快 |
| some | 布爾值 | 否 | 可(短路) | 返回false | 檢查是否存在符合條件的元素 | 最快(可能提前結(jié)束) |
| every | 布爾值 | 否 | 可(短路) | 返回true | 檢查所有元素是否都符合條件 | 最快(可能提前結(jié)束) |
詳細(xì)對(duì)比說明
1. 返回值差異
無返回值:
forEach,for...of返回新數(shù)組:
map,filter返回布爾值:
some,every
2. 循環(huán)控制能力
可完全中斷:
for...of(使用break),some/every(短路特性)不可中斷:
forEach,map,filter
3. 空數(shù)組處理
特殊返回:
some([])→falseevery([])→true(空真規(guī)則)
跳過不執(zhí)行:
forEach,for...of返回空數(shù)組:
map([]),filter([])
4. 性能考量
最快:
some/every(可能提前結(jié)束)較快:
for...of(原生循環(huán))中等:
forEach,filter稍慢:
map(必須處理所有元素)
5. 典型使用場(chǎng)景
數(shù)據(jù)轉(zhuǎn)換 →
map數(shù)據(jù)篩選 →
filter簡(jiǎn)單遍歷 →
forEach或for...of存在性檢查 →
some全體性檢查 →
every需要流程控制 →
for...of
選擇建議
需要 轉(zhuǎn)換數(shù)組結(jié)構(gòu) →
map需要 過濾數(shù)據(jù) →
filter需要 檢查是否至少一個(gè)元素滿足條件 →
some需要 檢查所有元素是否滿足條件 →
every需要 靈活控制循環(huán)過程 →
for...of只需要 簡(jiǎn)單遍歷執(zhí)行操作 →
forEach
總結(jié)
到此這篇關(guān)于JavaScript中各種對(duì)象遍歷方法總結(jié)的文章就介紹到這了,更多相關(guān)JS各種對(duì)象遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript 開發(fā)之百度地圖使用到的js函數(shù)整理
這篇文章主要介紹了javascript 開發(fā)之百度地圖使用到的js函數(shù)整理的相關(guān)資料,需要的朋友可以參考下2017-05-05
JavaScript?顯示一個(gè)倒計(jì)時(shí)廣告牌的實(shí)現(xiàn)示例
本文主要介紹了JavaScript?顯示一個(gè)倒計(jì)時(shí)廣告牌的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
js動(dòng)態(tài)生成Html元素實(shí)現(xiàn)Post操作(createElement)
這篇文章主要介紹了js動(dòng)態(tài)生成Html元素實(shí)現(xiàn)Post操作(createElement),需要的朋友可以參考下2015-09-09
在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零)
這篇文章主要介紹了在js中做數(shù)字字符串補(bǔ)0(js補(bǔ)零),需要的朋友可以參考下2017-03-03
JavaScript實(shí)現(xiàn)一個(gè)空中避難的小游戲
最近利用Javascript實(shí)現(xiàn)了一個(gè)小游戲,覺著還不錯(cuò),所以分享給大家,下面這篇文章主要給大家介紹了利用JavaScript實(shí)現(xiàn)一個(gè)空中避難的小游戲的相關(guān)資料,文中給出了完整的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。2017-06-06
JavaScript將DOM事件處理程序封裝為event.js 出現(xiàn)的低級(jí)錯(cuò)誤問題
這篇文章主要介紹了JavaScript將DOM事件處理程序封裝為event.js 出現(xiàn)的低級(jí)錯(cuò)誤問題做個(gè)筆錄,以防出現(xiàn)類似錯(cuò)誤,需要的朋友可以參考下2016-08-08
原生js實(shí)現(xiàn)each方法實(shí)例代碼詳解
這篇文章主要介紹了原生js實(shí)現(xiàn)each方法,需要的朋友可以參考下2019-05-05
通過js示例講解時(shí)間復(fù)雜度與空間復(fù)雜度
這篇文章主要給大家介紹了關(guān)于如何通過js示例講解時(shí)間復(fù)雜度與空間復(fù)雜度的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
js將iframe中控件的值傳到主頁面控件中的實(shí)現(xiàn)方法
主要是通過在主頁面定義一個(gè)傳輸數(shù)據(jù)的函數(shù)GetData(data),然后在iframe嵌入頁面中通過parent.GetData(data),這樣即可在GetData實(shí)現(xiàn)將data進(jìn)行處理即可。2013-03-03

