還在 for 循環(huán)?這七個數(shù)組方法不懂,別說你懂 JavaScript
很多開發(fā)者把命都交給了 for 循環(huán)。可如果你還像 2010 年那樣遍歷數(shù)組,你就在浪費代碼與時間。
真正高效的 JS 開發(fā)者會讓語言替你干活。現(xiàn)代 JavaScript 自帶一批強力的數(shù)組方法,能替換初學(xué)者式的遍歷,讓代碼更短、更清晰、更可讀。
我不是在說人人都會的 map() / filter()——下面這些被低估的方法,常能把你的代碼量直接砍半。
1.at() —— 按索引拿元素(支持負(fù)數(shù)從末尾取)
舊寫法:
const arr = [10, 20, 30, 40];
const last = arr[arr.length - 1];新寫法:
const last = arr.at(-1);要點: 負(fù)索引從尾部計數(shù),更直觀。
2.findLast() —— 從尾部開始找最后一個匹配項
舊寫法:
const nums = [2, 4, 7, 4, 9];
const lastEven = nums.reverse().find(n => n % 2 === 0);新寫法:
const lastEven = nums.findLast(n => n % 2 === 0);優(yōu)點: 無需 reverse() 與中間數(shù)組,直接到答案。
3.findLastIndex() —— 需要索引時用它
舊寫法:
const nums = [1, 3, 7, 3, 9];
const lastIndex =
nums.length - 1 - [...nums].reverse().findIndex(n => n === 3);新寫法:
const lastIndex = nums.findLastIndex(n => n === 3);結(jié)果: 可讀、直接、沒“反向索引”腦筋急轉(zhuǎn)彎。
4.flat() —— 一行拍平嵌套數(shù)組
舊寫法:
const nested = [1, [2, [3, 4]]];
const flat = nested.reduce((acc, val) => acc.concat(val), []);新寫法:
const flat = nested.flat(2);技巧: 傳入深度(如 2),或用 flat(Infinity) 完全拍平。
5.flatMap() —— 映射 + 拍平,一步到位
舊寫法:
const arr = [1, 2, 3];
const doubled = arr.map(x => [x, x * 2]).flat();新寫法:
const doubled = arr.flatMap(x => [x, x * 2]);好處: 鏈更短、更快、更易讀。
6.toSorted() —— 不變更原數(shù)組的排序
舊寫法:
const arr = [3, 1, 2];
const sorted = [...arr].sort((a, b) => a - b);新寫法:
const sorted = arr.toSorted((a, b) => a - b);意義: 返回排序后的新數(shù)組,不污染原數(shù)據(jù),更函數(shù)式、更安全。
7.toReversed() —— 無副作用的反轉(zhuǎn)
舊寫法:
const arr = [1, 2, 3];
const reversed = [...arr].reverse();新寫法:
const reversed = arr.toReversed();場景: 純函數(shù)/不可變數(shù)據(jù)流,不再擔(dān)心被意外改動。
組合技:這些方法一起用效果更佳
const users = [
{ name: 'Alice', active: false },
{ name: 'Bob', active: true },
{ name: 'Carol', active: true }
];
// 獲取“最后一個活躍用戶”的名字
const lastActive = users
.filter(u => u.active)
.map(u => u.name)
.toReversed()
.at(0); // 'Carol'再給幾點小貼士:
- 想不變更原數(shù)組時,優(yōu)先用 toSorted() / toReversed(),少用會修改原數(shù)組的 sort() / reverse()。
- 需要從尾部找元素或索引,直接用 findLast() / findLastIndex(),避免 reverse() 帶來的副作用與拷貝成本。
- 處理嵌套結(jié)構(gòu)時,別忘了 flat() / flatMap(),常比 reduce + concat 更高效易讀。
把這篇收藏一下,然后切回 VS Code 試一遍。寫更少,更清晰,更現(xiàn)代的 JavaScript。


































