Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào hai mảng chữ, arr1 và arr2, làm đối số đầu tiên và thứ hai.
Hàm phải tìm phần tử chung trong arr1 và arr2 có tổng chỉ số nhỏ nhất. Nếu có hòa, xuất ra tất cả chúng không yêu cầu thứ tự.
Ví dụ, nếu đầu vào là:
const arr1 = ['a', 'b', 'c', 'd']; const arr2 = ['d', 'a', 'c'];
Thì đầu ra nên là:
const output = ['a'];
Giải thích kết quả
Vì 'd' và 'a' chung trong cả hai mảng, tổng chỉ số của 'd' là 3 + 0 = 3 và của 'a' là 0 + 1 = 1, do đó 'a' là phần tử cần tìm.
Ví dụ
Dưới đây là mã:
const arr1 = ['a', 'b', 'c', 'd'];
const arr2 = ['d', 'a', 'c'];
const findCommon = (arr1 = [], arr2 = []) => {
let sum = Infinity
const map = arr1.reduce((acc, str, index) => {
acc[str] = index
return acc
}, {})
for (let i = 0; i < arr2.length; i++) {
const index1 = map[arr2[i]]
if (index1 >= 0 && index1 + i < sum) {
sum = index1 + i
}
}
const result = []
for (let i = 0; i < arr2.length; i++) {
const index1 = map[arr2[i]]
if (index1 >= 0 && index1 + i === sum) {
result.push(arr2[i])
}
}
return result
}
console.log(findCommon(arr1, arr2));
Kết quả
Kết quả console:
['a']