Rate this post

reduce() là một method trong javascript cho phép bạn xử lý một mảng và biến nó thành một giá trị duy nhất. Nó là một hàm có hai tham số:

  • callback: là hàm xử lý mỗi phần tử trong mảng.
  • initialValue (optional): là giá trị ban đầu của accumulator. Nếu không có giá trị này, thì phần tử đầu tiên của mảng sẽ được sử dụng làm giá trị ban đầu của accumulator.

Các bài viết liên quan:

Hàm callback có bốn tham số :

  • accumulator: là giá trị ban đầu hoặc giá trị trả về trước đó của hàm callback.
  • currentValue: là phần tử hiện tại đang xét trong mảng.
  • currentIndex(Optional): là chỉ số của phần tử hiện tại đang xét trong mảng.
  • array(Optional): là mảng đang được giảm.

Ví dụ:

let arr = [1,2,3,4,5];

let result = arr.reduce(function(accumulator, currentValue) {

return accumulator + currentValue;

}, 0);

console.log(result); // 15

Trong ví dụ trên, chúng ta sử dụng reduce để tính tổng của tất cả các phần tử trong mảng `arr`. 

– `accumulator` ban đầu là 0

– `currentValue` là các giá trị trong mảng

Sau khi hoàn tất reduce, giá trị trả về của hàm là tổng của tất cả các giá trị trong mảng.

Bạn cũng có thể sử dụng reduce để tạo ra các kết quả phức tạp hơn, chẳng hạn như tạo ra một object hoặc mảng mới từ một mảng đã cho.

Ví dụ:

let arr = [1,2,3,4,5];

let result = arr.reduce(function(accumulator, currentValue) {

    accumulator.push(currentValue * 2);

    return accumulator;

}, []);

console.log(result); // [2, 4, 6, 8, 10]

Trong ví dụ này, chúng ta sử dụng reduce để tạo ra một mảng mới chứa tất cả các giá trị trong mảng arr nhân 2.

  • accumulator ban đầu là một mảng rỗng
  • currentValue là các giá trị trong mảng

Sau khi hoàn tất reduce, giá trị trả về của hàm là một mảng mới chứa các giá trị trong mảng arr nhân 2.

Reduce cung cấp một cách linh hoạt để tạo ra các kết quả từ một mảng, chúng có thể được sử dụng để tính toán, tạo ra các mảng mới hoặc object mới hoặc làm các việc khác.

Có một vài cách sử dụng reduce thường gặp là:

  • Tính tổng, tích, số nhỏ nhất, số lớn nhất của các phần tử trong mảng
  • Tạo ra một mảng mới hoặc object mới từ một mảng đã cho
  • Chuyển đổi một mảng về một giá trị duy nhất

Tại sao nên sử dụng Reduce?

Reduce là một trong những method phổ biến và linh hoạt nhất trong javascript vì nó cho phép bạn xử lý một mảng và biến nó thành bất cứ giá trị nào mà bạn muốn, vì vậy chúng tôi khuyên bạn nên học và sử dụng nó để giải quyết các vấn đề liên quan đến mảng và dữ liệu.

Ngoài việc sử dụng reduce() để tính toán và xử lý dữ liệu trong mảng, nó còn rất hữu dụng khi bạn muốn sử dụng một mảng như một bộ dữ liệu đầu vào để tính toán hoặc xử lý dữ liệu một cách tổng quát. Ví dụ như tính tổng của tất cả các giá trị trong mảng, tìm phần tử xuất hiện nhiều nhất, hoặc tìm một phần tử cụ thể trong mảng.

reduce() cũng có thể sử dụng với các kiểu dữ liệu khác nhau, như là object, string, hoặc các kiểu số nguyên, và nó cũng có thể sử dụng với các kiểu dữ liệu tùy chọn khác nhau, ví dụ như sử dụng reduce để giải quyết các vấn đề liên quan đến chuỗi, hoặc để xử lý và chuyển đổi dữ liệu trong object, hoặc tìm kiếm một giá trị đặc biệt trong object.

Một số ví dụ cụ thể về cách sử dụng Reduce

Có rất nhiều cách sử dụng reduce() trong javascript, tùy thuộc vào bài toán cần giải quyết. Tôi sẽ cho bạn một số ví dụ cụ thể để giúp bạn hiểu rõ hơn về cách sử dụng reduce() trong javascript:

  1. Tìm kiếm giá trị trong một mảng dựa trên một điều kiện:
let people = [

    { name: 'John', age: 25 },

    { name: 'Mike', age: 35 },

    { name: 'Sarah', age: 30 }

];

let found = people.reduce((acc, cur) => {

    if (cur.age > 30) {

        acc = cur;

    }

    return acc;

}, null);

console.log(found); // { name: ‘Mike’, age: 35 }

  1. Nối tất cả các phần tử trong một mảng thành một chuỗi:
let words = ['I', 'am', 'a', 'programmer'];

let sentence = words.reduce((acc, cur) => acc + ' ' + cur);

console.log(sentence); // 'I am a programmer'

  1. Lấy giá trị lớn nhất trong một mảng:
let numbers = [1, 5, 7, 3, 8, 4];

let max = numbers.reduce((acc, cur) => (cur > acc ? cur : acc));

console.log(max); // 8

  1. Lấy giá trị xuất hiện nhiều nhất trong một mảng:
let animals = ['cat', 'dog', 'cat', 'monkey', 'dog', 'cat'];

let counts = animals.reduce((acc, cur) => {

  acc[cur] = (acc[cur] || 0) + 1;

  return acc;

}, {});

console.log(counts); // { cat: 3, dog: 2, monkey: 1 }

  1. Chuyển một mảng đa chiều thành một mảng 1 chiều:
let arrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

let flattened = arrays.reduce((acc, cur) => acc.concat(cur), []);

console.log(flattened); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

  1. Tính tổng của một mảng các đối tượng dựa trên giá trị của một thuộc tính:
let items = [

    { name: 'item1', value: 10 },

    { name: 'item2', value: 20 },

    { name: 'item3', value: 30 }

];

let totalValue = items.reduce((acc, cur) => acc + cur.value, 0);

console.log(totalValue); // 60

Những ví dụ trên chỉ là một số ví dụ về cách sử dụng reduce(), nhưng khả năng của nó rất rộng rãi và có thể sử dụng trong nhiều trường hợp khác.

Lưu ý khi sử dụng Reduce.

Sử dụng reduce có thể giúp bạn viết mã ngắn gọn và dễ hiểu hơn, và trong một số trường hợp nó còn có thể hoạt động nhanh hơn so với các cách xử lý dữ liệu khác, tuy nhiên trong một số trường hợp nó có thể chậm hơn và cần phải suy nghĩ kỹ trước khi sử dụng.

Tuy nhiên, nó không phù hợp với mọi trường hợp, nếu bạn chỉ cần tìm kiếm một phần tử trong mảng thì sử dụng find hoặc filter sẽ tốt hơn, nếu bạn cần lọc một mảng thì sử dụng filter sẽ tốt hơn.

Cần phải lưu ý rằng, khi sử dụng reduce(), bạn cần đảm bảo rằng bạn có một giá trị ban đầu hợp lệ để tránh lỗi. Nếu bạn không chỉ định giá trị ban đầu, giá trị đầu tiên trong mảng sẽ được sử dụng như là giá trị ban đầu.

Cũng cần lưu ý, khi sử dụng reduce, nếu mảng rỗng hoặc chưa có giá trị ban đầu sẽ trả về undefined.

Các bài toán với mảng lớn hay dữ liệu đặc biệt khó xử lý, chúng ta có thể dùng các phương pháp tối ưu hóa bộ nhớ, ví dụ như sử dụng thuật toán lazy evaluation, hoặc tách mảng lớn thành nhiều mảng nhỏ hơn để xử lý.

Ngoài ra, reduce cũng có thể sử dụng với các mảng được tạo từ generator hoặc async iterator, nhưng có thể tốn thêm thời gian hoặc tài nguyên hơn so với các mảng thông thường.

Trong tổng quát, reduce() là một method rất linh hoạt và hữu ích trong javascript, giúp bạn xử lý và chuyển đổi dữ liệu mảng và dữ liệu một cách eficient và đơn giản. Nó cho phép bạn tạo ra các kết quả phức tạp hơn từ một mảng đã cho, nhưng cũng cần phải cẩn thận khi sử dụng nó để tránh lỗi hoặc tốn thêm tài nguyên.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now