나는 주어진 배열의 모든 가능한 조합을 계산하기위한 다음과 같은 기능을 포함하는 프로그램이 있습니다 예를 들어효율적인 자바 스크립트 조합 기능
function combinations(arr, k) {
var i,
subI,
sub,
combinationsArray = [],
next;
for (i = 0; i < arr.length; i++) {
if (k === 1) {
combinationsArray.push([arr[i]]);
} else {
sub = combinations(arr.slice(i + 1, arr.length), k - 1);
for (subI = 0; subI < sub.length; subI++) {
next = sub[subI];
next.unshift(arr[i]);
combinationsArray.push(next);
}
}
}
return combinationsArray;
};
:
combinations([1,2,3],2);
을 반환 :
나는 이것을 내 프로그램에서 특히 배열과 함께 많이 사용합니다. 매개 변수는 해당 배열에서 두 개의 가능한 모든 조합을 반환하는 12 개 개체의 매개 변수입니다. 66 가지 가능한 조합이 있습니다. 내 프로그램에서, 나는이 함수에 의해 반환 된 배열의 객체 요소의 속성 값을 많이 확인하고, 비교하고, 조건문을 실행해야한다. 그러나이 같은 조합 함수를 사용하는 함수를 호출하면 브라우저가 충돌한다. (firefox는 messege를 반환합니다 : "이 페이지의 스크립트가 사용 중이거나 응답을 멈췄을 수 있습니다. 이제 스크립트를 중단하거나 디버거에서 스크립트를 열거 나 스크립트를 계속 진행할 수 있습니다.") 항상 위의 조합 중 일부는 충돌로 인해 호출됩니다.
찾았 음 http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/ 기능을 반복적으로 호출하는 코드의 효율성을 향상시키는 좋은 방법입니다 (예 : 조합 기능).
ncsonline의 메서드와 조합 함수를 효과적으로 통합하여 브라우저 충돌을 막을 수 있습니까?
나는 setTimeout 메서드를 사용한다고 생각한다. 조합 함수 자체가 아니라 조합 함수를 호출하는 루프에 적용해야한다. 한 번 66 가지 조합을 만드는 것은 그만큼 집중해서는 안됩니다. 그러나 웹 작업자는이를 지원하는 모든 브라우저로 이동할 수있는 방법 일 수 있습니다. –