jsrosetta

Collections

Duyệt mảng (map, filter, reduce)

forEach, map, filter, reduce của Node.js so với iterator của Rust, Swift, Java và hàm generic Map/Filter/Reduce tự viết trong Go.

Phiên bản tối thiểu
Node.js ≥ 12.20Go ≥ 1.18Rust ≥ 1.58Swift ≥ 4.0Java ≥ 25
Đã chạy thử trên
Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1

Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.

Node.js có sẵn forEach, map, filter, reduce ngay trên Array.prototype. Go không có các hàm này cho slice trong thư viện chuẩn, nhưng từ Go 1.18 bạn có thể tự viết chúng một lần bằng generic rồi dùng lại cho mọi kiểu dữ liệu. Rust, Swift và Java thì có sẵn map/filter/fold (hoặc reduce) ngay trên iterator/stream — không cần tự viết như Go; riêng Java thường gộp kết quả bằng collect/toList thay vì Stream.reduce(), vì reduce() chỉ hợp để rút gọn ra một giá trị bất biến (như tính tổng), không nên dùng để build một collection có thể thay đổi.

Duyệt qua từng phần tử (forEach)

const array = ['a', 'b', 'c']
 
array.forEach((value, i) => {
  console.log(i, value)
})
// 0 a
// 1 b
// 2 c

map, filter, reduce bằng generic

const mapped = array.map((value) => value.toUpperCase())
console.log(mapped) // ['A', 'B', 'C']
 
const filtered = array.filter((value, i) => i % 2 == 0)
console.log(filtered) // ['a', 'c']
 
const reduced = array.reduce((acc, value, i) => {
  if (i % 2 == 0) acc.push(value.toUpperCase())
  return acc
}, [])
console.log(reduced) // ['A', 'C']

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#array-iteration