>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 다양한 길이의 배열로부터 데카르트 곱을 효율적으로 생성하는 방법은 무엇입니까?

JavaScript에서 다양한 길이의 배열로부터 데카르트 곱을 효율적으로 생성하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-30 01:52:10769검색

How to Efficiently Generate Cartesian Products from Arrays of Varying Lengths in JavaScript?

JavaScript의 다양한 배열에 대한 데카르트 곱 생성

다양한 길이의 배열 집합에서 가져온 요소의 가능한 모든 조합을 생성하려면 JavaScript 프로그래머는 독특한 과제에 직면합니다. 동적 배열 수를 처리하기 위해 솔루션을 사용자 정의하는 것은 까다로울 수 있습니다.

간단하고 효율적인 접근 방식은 아래 그림과 같은 재귀 도우미 기능을 사용하는 것입니다.

function cartesian(...args) {
  var r = [], max = args.length - 1;
  function helper(arr, i) {
    for (var j = 0, l = args[i].length; j < l; j++) {
      var a = arr.slice(0); // clone arr
      a.push(args[i][j]);
      if (i == max) r.push(a);
      else helper(a, i + 1);
    }
  }
  helper([], 0);
  return r;
}

이를 활용하려면 함수를 사용하려면 배열을 인수로 전달하기만 하면 됩니다.

cartesian([0, 1], [0, 1, 2, 3], [0, 1, 2]);

출력에는 제공된 요소의 가능한 모든 조합이 포함됩니다. 배열:

[
  [0, 0, 0],
  [0, 0, 1],
  [0, 0, 2],
  [0, 1, 0],
  [0, 1, 1],
  [0, 1, 2],
  [0, 2, 0],
  [0, 2, 1],
  [0, 2, 2],
]

배열 배열의 경우 나머지 매개변수를 사용하는 대신 함수 서명을 함수 카르테시안(args)으로 조정합니다. 이 접근 방식을 사용하면 요소 개수가 다양한 배열을 처리할 수 있어 이러한 조합 문제에 대한 유연한 솔루션을 제공할 수 있습니다.

위 내용은 JavaScript에서 다양한 길이의 배열로부터 데카르트 곱을 효율적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.