Javascript는 항상 가장 긴 배열에서 함수를 실행하고 해당 함수 내에서 가장 짧은 배열을 사용합니다.

레미

다음 함수는 항상 가장 긴 배열의 모든 항목을 비교하고 더 짧은 배열에 있는지 확인해야합니다.

이제 다음 코드가 작동하지만 약간 장황합니다.

const findSimilar = (arr1, arr2) => {
  const arrLongest = (arr1.length < arr2.length) ? arr2 : arr1;
  const arrShortest = (arr1.length < arr2.length) ? arr1 : arr2;
  return arrLongest.filter((arrLongestItem) => arrShortest.includes(arrLongestItem));
};

console.log(findSimilar([1,2,3,4,3], [1,2,3])); // (3) [1, 2, 3, 3]
console.log(findSimilar([1,2,3], [1,2,3,4,3])); // (4) [1, 2, 3, 3]

이 두 변수가 필요하다 arrLongestarrShortest? 아니면 다른 방법이 있습니까?

확실한 성능

조건부 연산자를 한 번만 사용한 다음 배열의 두 변수로 분해 할 수 있습니다.

const findSimilar = (arr1, arr2) => {
  const [arrLongest, arrShortest] = (arr1.length < arr2.length) ? [arr2, arr1] : [arr1, arr2];
  return arrLongest.filter((arrLongestItem) => arrShortest.includes(arrLongestItem));
};

console.log(findSimilar([1,2,3,4,3], [1,2,3])); // (3) [1, 2, 3, 3]
console.log(findSimilar([1,2,3], [1,2,3,4,3])); // (4) [1, 2, 3, 3]

계산 복잡성을에서 O(n^2)줄이려면 O(n)가장 짧은 배열에 대신 Set을 사용하십시오.

const findSimilar = (arr1, arr2) => {
  const [arrLongest, arrShortest] = (arr1.length < arr2.length) ? [arr2, arr1] : [arr1, arr2];
  const shortSet = new Set(arrShortest);
  return arrLongest.filter(shortSet.has, shortSet);
};

console.log(findSimilar([1,2,3,4,3], [1,2,3])); // (3) [1, 2, 3, 3]
console.log(findSimilar([1,2,3], [1,2,3,4,3])); // (4) [1, 2, 3, 3]

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관