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

Cân bằng hai mảng trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào hai mảng số arr1 và arr2 làm đối số thứ nhất và thứ hai. Tổng các phần tử trong arr1 và arr2 khác nhau. Hàm phải chọn một phần tử từ mảng đầu tiên đẩy vào mảng thứ hai và chọn một phần tử từ mảng thứ hai đẩy vào mảng đầu tiên sao cho tổng các phần tử của cả hai mảng trở nên bằng nhau. Trả về mảng chứa hai phần tử này.

Ví dụ, nếu đầu vào là:

Đầu vào

const arr1 = [1, 2, 5];
const arr2 = [2, 4];

Đầu ra

const output = [5, 4];

Giải thích

Vì nếu lấy 5 từ arr1 đẩy sang arr2 và lấy 4 từ arr2 đẩy sang arr1 thì tổng cả hai mảng sẽ bằng nhau (7).

Ví dụ

Dưới đây là mã thực hiện:

const arr1 = [1, 2, 5];
const arr2 = [2, 4];
const balanceArrays = (arr1 = [], arr2 = []) => {
  const sumA = arr1.reduce((acc, v) => acc + v, 0);
  const sumB = arr2.reduce((acc, v) => acc + v, 0);
  const difference = (sumA + sumB) / 2 - sumA;
  const map = arr2.reduce((acc, v) => {
    acc[v] = true;
    return acc;
  }, {});
  for (let i = 0; i < arr1.length; i++) {
    if (map[arr1[i] + difference] === true) {
      return [arr1[i], arr1[i] + difference];
    }
  }
  return [];
};
console.log(balanceArrays(arr1, arr2));

Kết quả

[5, 4]