Functional Programming

Array.reduce trong Javascript

Mỗi developer chuyên về bất kỳ ngôn ngữ lập trình nào cũng sẽ cho bạn biết có một công cụ mạnh mẽ mà ngôn ngữ cung cấp mà họ hiếm khi sử dụng và muốn họ biết nhiều hơn về nó. Đối với tôi, đó là Array.prototype.reduce. Tôi khá thích các phương thức Array khác như map, filterfind, nhưng reduce là một phương thức mà tôi biết là mạnh mẽ nhưng chưa bao giờ thực sự được sử dụng nhiều.

Mãi cho đến khi tôi tái cấu trúc một số mã Trình gỡ lỗi Firefox DevTools mà tôi đã tìm thấy một trường hợp sử dụng tuyệt vời để giảm - một trong những dự định tôi sẽ sử dụng trong tương lai.

Array.reduce

Các phương thức như forEachmap được tạo ra để tránh side-effects, và giảm cũng không ngoại lệ. Tuy nhiên, trong trường hợp này, giảm có thể trả về một Object khác ngoài Array. Lấy trường hợp này làm ví dụ:

const sources = [
  {
    id: "server1.conn13.child1/39",
    url: "https://davidwalsh.name/"
  },
  {
    id: "server1.conn13.child1/37",
    url: "https://davidwalsh.name/util.js"
  }
];

// Return an object of sources with the keys being "id"
const sourcesMap = sources.reduce((map, source) => {
  map[source.id] = source
  return map;
}, {});

Trong ví dụ trên, tôi lấy một mảng các đối tượng Source và trả về một đối tượng bằng chữ với mỗi id của Source làm khóa:

{
  "server1.conn13.child1/39": {
    "id": "server1.conn13.child1/39",
    "url": "https://davidwalsh.name/"
  },
  "server1.conn13.child1/37": {
    "id": "server1.conn13.child1/37",
    "url": "https://davidwalsh.name/util.js"
  }
}

Lưu ý rằng {}, là đối số cuối cùng reduce, là đối tượng bắt đầu / mặc định được trả về. Nếu không có mục nào trong mảng, {} sẽ được trả về. Cũng đánh giá cao rằng một phương thức mảng trả về một đối tượng bằng chữ và không phải là một mảng được sửa đổi!

Thật điên rồ khi tôi không sử dụng reduce nhiều hơn, nhưng đó chỉ là cuộc sống trong ngành của chúng tôi - tất cả chúng ta đều có một vài API mà chúng ta chưa sử dụng nhiều. Bạn thường thấy tính năng nào của JavaScript nhưng không được sử dụng?

Link bài viếc gốc: https://davidwalsh.name/using-array-reduce

Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration