Computer >> Máy Tính >  >> Lập trình >> Javascript

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

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript có 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 là khác nhau. Hàm của chúng ta nên chọn một phần tử từ mảng đầu tiên và đẩy nó vào mảng thứ hai và chọn một phần tử từ mảng thứ hai và đẩy nó trong 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. Chúng ta sẽ trả về một mảng gồm hai phần tử này.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

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

Đầu ra

const output = [5, 4];

Giải thích đầu ra

Bởi vì nếu chúng ta xóa 5 khỏi arr1 và đẩy nó lên arr2 và xóa 4 khỏi arr2 và đẩy nó lên arr1 thì tổng của cả hai mảng sẽ bằng nhau (7).

Sau đây là mã:

Ví dụ

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));

Đầu ra

[5, 4]