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]