Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Gộp các phần tử trùng lặp trong mảng bằng cộng dồn trong JavaScript

Mô tả bài toán

Cho mảng số, gộp các giá trị trùng nhau bằng cách cộng dồn vào lần xuất hiện đầu tiên, loại bỏ các bản sao.

Ví dụ minh họa

const arr = [20, 10, 15, 20, 15, 10];

const addSimilar = arr => {
  for (let i = 0; i < arr.length; i++) {
    while (i !== arr.lastIndexOf(arr[i])) {
      const ind = arr.lastIndexOf(arr[i]);
      arr[i] += arr.splice(ind, 1)[0];
    }
  }
};

addSimilar(arr);
console.log(arr);

Kết quả

[ 40, 20, 30 ]

Phân tích

Thuật toán sửa đổi mảng gốc (in-place). Duyệt từ đầu, tìm lần xuất hiện cuối cùng của giá trị hiện tại, cộng vào vị trí đầu tiên và xóa bản sao cuối.

Cách viết hàm thuần túy (immutable)

const addSimilar = arr => 
  Object.values(arr.reduce((acc, v) => (acc[v] = (acc[v] || 0) + v, acc), {}));

Ưu điểm cách mới

Không thay đổi mảng gốc, dễ test, tận dụng object như hash map O(n).