Tổng hợp 36 phương thức Array trong JavaScript: tham số, giá trị trả về và các phương thức nên tránh

Phía dưới là bảng tra cứu đầy đủ 36 phương thức Array của JavaScript, được nhóm theo 5 hành động cơ bản: thêm – xoá – sửa – tra cứu – kiểm tra. Bên cạnh đó, bài viết cũng liệt kê các API đã lỗi thời hoặc không còn được khuyên dùng, cùng với những phương thức "phi phá hoại" mới trong ES2023 (toReversed(), toSorted(), toSpliced(), with()) để thay thế.

Bảng tham khảo nhanh: 36 phương thức Array

NhómPhương thứcTham số chínhGiá trị trả về
Thêmconcat...arraysMảng mới sau khi nối
push...itemsĐộ dài mới của mảng
unshift...itemsĐộ dài mới của mảng
XoápopPhần tử bị loại bỏ
shiftPhần tử bị loại bỏ
slicestart?, end?Mảng cắt lát (shallow copy)
splicestart, deleteCount?, ...itemsMảng chứa các phần tử đã xoá
SửafromarrayLike, mapFn?Mảng mới
of...itemsMảng mới
copyWithintarget, start, end?Mảng đã bị sửa (cùng tham chiếu)
fillvalue, start?, end?Mảng đã bị sửa (cùng tham chiếu)
flatdepth?Mảng đã "dẹp" (flatten)
sortcompareFn?Mảng đã sắp xếp (cùng tham chiếu)
reverseMảng đảo ngược (cùng tham chiếu)
Chuyển đổijoinseparator?Chuỗi
toStringChuỗi
toLocaleStringChuỗi địa phương hoá
Tra cứu / DuyệtforEachcallbackundefined
mapcallbackMảng kết quả ánh xạ
flatMapcallbackMảng kết quả ánh xạ + flatten 1 cấp
filtercallbackMảng kết quả lọc
findcallbackPhần tử tìm thấy hoặc undefined
findIndexcallbackChỉ số hoặc -1
indexOfsearch, fromIndex?Chỉ số hoặc -1
lastIndexOfsearch, fromIndex?Chỉ số hoặc -1
atindexPhần tử hoặc undefined
keys / values / entriesIterator
Kiểm traincludessearch, fromIndex?boolean
somecallbackboolean
everycallbackboolean
Array.isArrayvalueboolean
Gộp / Tính toánreducecallback, initial?Kết quả cuối cùng
reduceRightcallback, initial?Kết quả cuối cùng (duyệt phải → trái)

Phân loại giá trị trả về

  • Mảng mới: map, filter, slice, concat, flat, flatMap, from, ofkhông thay đổi mảng gốc.
  • Mảng gốc: push, pop, shift, unshift, splice, sort, reverse, copyWithin, fillphá hoại (mutate) mảng gốc.
  • boolean: includes, some, every, Array.isArray.
  • Chỉ số / phần tử: indexOf, lastIndexOf, findIndex, find, at.
  • Chuỗi: join, toString, toLocaleString.
  • Iterator: keys, values, entries.
  • Giá trị tích luỹ: reduce, reduceRight.
  • undefined: forEach.

Những API & kỹ thuật nên tránh

Kỹ thuật / APIVấn đềThay thế hiện đại
Array.observe, Array.unobserveĐã gỡ bỏ hoàn toànProxy
Gọi phương thức dạng static
Array.slice(arr, …)
Không còn tồn tạiarr.slice(…)
for…in trên mảngDuyệt cả prototype, thứ tự không đảm bảofor…of, for, forEach
reverse(), sort(), splice()Phá hoại mảng gốc → khó debug trong React/VuetoReversed(), toSorted(), toSpliced()
Gán trực tiếp arr[i] = xPhá hoại mảng gốcarr.with(i, x)
Chuỗi filter().map().slice() dàiTạo nhiều mảng trung gian, tốn bộ nhớDùng vòng lặp thuần hoặc iterator helpers (lazy)

flatMap() – ánh xạ & dẹp trong một lần duyệt

const nums = [1, 2, 3];

// ánh xạ thành [x, x*2] rồi dẹp 1 cấp
const res = nums.flatMap(n => [n, n * 2]);
console.log(res); // [1, 2, 2, 4, 3, 6]

// so với map().flat()
const res2 = nums.map(n => [n, n * 2]).flat();
console.log(res2); // cùng kết quả nhưng chậm hơn

Ứng dụng thực tế

// 1. Tách câu thành từ
const sentences = ['Xin chào thế giới', 'JavaScript thật tuyệt'];
const words = sentences.flatMap(s => s.split(' '));
console.log(words); // ["Xin","chào","thế","giới","JavaScript","thật","tuyệt"]

// 2. Gộp tags từ danh sách user
const users = [
  { name: 'An', tags: ['js', 'web'] },
  { name: 'Bình', tags: ['python', 'data'] },
  { name: 'Chi', tags: [] }
];
const allTags = users.flatMap(u => u.tags);
console.log(allTags); // ["js","web","python","data"]

reduce() – gộp mảng thành một giá trị

const carts = [
  { item: 'Book', price: 120 },
  { item: 'Pen',  price: 15  },
  { item: 'Ruler', price: 5   }
];

// Tính tổng giá trị
const total = carts.reduce((sum, { price }) => sum + price, 0);
console.log(total); // 140

// Gom thành object
const byItem = carts.reduce((acc, { item, price }) => {
  acc[item] = price;
  return acc;
}, {});
console.log(byItem); // { Book: 120, Pen: 15, Ruler: 5 }

Lưu ý với initialValue

const empty = [];
// ❌ empty.reduce((a, b) => a + b); // TypeError
// ✅
const safe = empty.reduce((a, b) => a + b, 0);
console.log(safe); // 0

Thẻ: javascript-array es2023 flatmap Reduce toReversed

Đăng vào ngày 27 tháng 7 lúc 14:56