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

Phần tử chung có tổng chỉ số nhỏ nhất bằng JavaScript


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']