다음과 같은 결과를 얻으려고합니다. Miniors | Boys | 54kg - 62kg
모든 값은 파이프로 구분됩니다. 특정 "제한 유형"을 포함하는 배열에서 온 것입니다. 예 : ageGroups, genders, weightClasses
(위 참조).동적으로 중첩 된 루프가 재귀를 통해 해결되도록
내가 지금이 결과를 얻을 수있는 방법은 중첩 된 forEach 루프 (underscorejs 사용)를 하드 코드하는 경우입니다. 그러나 이것은 내가 원하는 결과를 얻으려면 루프를 몇 개 배열해야 하는지를 의미합니다. . 이 "미세"작동 :
var categories = [];
_.each(ageGroups, function(ageGroup) {
_.each(gender, function(gender) {
_.each(weightClasses, function(weightClass) {
categories.push(ageGroup.name + ' | ' + gender.name + ' | ' + weightClass.name);
});
});
});
출력은 제한 어레이의 모든 가능한 조합을 갖는 어레이 (카테고리)이다.
이제 내 문제는 알 수없는 제한 개수의 배열을 사용하여 동일한 작업을 수행 할 방법이 필요하다는 것입니다. 적절한 솔루션에 대한 내 생각은 재귀, 하지만 인 나는 아직 재귀 주위에 내 머리를 정리하기 :
바이올린 준비 할 수 아니에요 이후 실제로 작동 아무것도 생산할 수 없었다 일부 테스트 데이터는 여기에서 찾을 수 있습니다 : jsFiddle. 바이올린은 결과 출력의 간단한 데이터 바인딩 및 디버깅을 위해 각도를 사용하고 배열 처리를 위해 밑줄을 사용합니다.
하지 시도 부작용 (예 : 전역'categories' 배열에'push ')을 사용하는 대신 각 단계에서'return'을 사용하고'map' (그리고'flatten')을 사용하십시오 – Bergi
흠 .. 오키. Flatten 다른 배열에서 다른 값의 조합이 필요하기 때문에 여기에 어떤 용도로 사용하지 않을 수 있습니다. 그러나지도가 뭔가있을 수 있습니다 .. 어떻게 동적 인 양의 배열에 직면하고있는 문제를 해결할 수 있는지는 알 수 없지만. 정교하게 신경 쓰는거야? – aup
'map'을 사용해보십시오 (비 일반적인 방식으로조차도). 그러면 여러분은'flatten'을 위해 필요한 것을 보게 될 것입니다. 그런 다음'groups', 현재 그룹의 인덱스 ("중첩 레벨") 및 방문한 그룹의 현재 이름을 사용하는 함수를 만듭니다. 네 스팅의 레벨이'groups'의 길이에 도달했을 때) 기본 케이스는 그 현재 이름 ('|'에 의해 합쳐진)을 반환 할 것입니다. 재귀 적 케이스 - 당신은 알아낼 것입니다. – Bergi