2017-05-12 9 views
1

저는 자바 스크립트 내에서 순열에 대한 작업을 해왔습니다. 예를 들어 전화 키패드와 같은 글자에 부식을 일으키는 숫자를 사용할 수 있습니다. 내가하고 싶은 일은 키에 부식성이있는 글자를 가져 와서 배열로 나누고 그 배열을 모든 가능한 순열 또는 조합을 찾기위한 함수로 전달하는 것입니다.여러 배열을 함수에 특정 형식으로 전달하는 방법은 무엇입니까?

내가 지금까지 무엇을 가지고 있는지 보자. 번호와 문자를 배열로 저장했습니다.

var array = [{ key: '2', value: 'a,b,c'}, 
      { key: '3', value: 'd,e,f'}, 
      { key: '4', value: 'g,h,i'}] 

다음이 배열을 반복하고 키에 부식되는 문자를 가져오고 싶습니다. 문자가 ["a", "b", "c"]로 분할 날을 제공

for(var thingy of array){ 
    var letters = thingy.value; 
    var splitArray = letters.split(',') 
} 

그래서 지금은 이러한 여러 배열을 가지고 모든 조합을 찾습니다 함수에 전달합니다. 이것은 내가이 스레드에서 가지고있는 기능입니다 :이 기능은 배열의 형식 그래서

var allArrays = [['a', 'b'], ['c', 'z'], ['d', 'e', 'f']]; 

같은 것으로 기대 Finding All Combinations of JavaScript array values

function allPossibleCases(arr) { 
     if (arr.length === 0) { 
      return []; 
      } 
     else if (arr.length ===1){ 
     return arr[0]; 
     } 
     else { 
      var result = []; 
      var allCasesOfRest = allPossibleCases(arr.slice(1)); 
       for (var c in allCasesOfRest) { 
        console.log("huh?" + allCasesOfRest); 
        for (var i = 0; i < arr[0].length; i++) { 
        result.push(arr[0][i] + allCasesOfRest[c]); 
        } 
       } 
       return result; 
       } 
      } 

내 질문 난에 내 새로 분할 배열을 통과 어떻게 올바른 형식으로이 기능을 수행 할 수 있습니까? 배열의 반복 루프에서이 작업을 수행해야합니까?

아직 완성되지 않은 코드입니다.

$(function() {           


     var array = [{ key: '2', value: 'a,b,c'}, 
        { key: '3', value: 'd,e,f'}, 
        { key: '4', value: 'g,h,i'}] 

     array.toString(); 
     console.log(array); 

     //Iterate over the array and find the value label    
     for(var thingy of array){ 
      var letters = thingy.value; 
      //Split the characters up 
      var splitarray = letters.split(',') 
      //Output all arrays via function to find permutations 
      //Hmm should this live here? 
      console.log(allPossibleCases(splitarray));    
     }     
    }); 



function allPossibleCases(arr) { 
     if (arr.length === 0) { 
     return []; 
     } 
    else if (arr.length ===1){ 
    return arr[0]; 
    } 
    else { 
     var result = []; 
     var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array 
     for (var c in allCasesOfRest) { 
      console.log("huh?" + allCasesOfRest); 
      for (var i = 0; i < arr[0].length; i++) { 
      result.push(arr[0][i] + allCasesOfRest[c]); 
      } 
     } 
     return result; 
     } 
    } 
+0

와 숫자 당신이에서 순열을 얻을해야합니까? 또는 어떤 입력이 더 필요합니까? –

+0

왜 [[ 'a', 'b'], [ 'c', 'z'], [ 'd', 'e', ​​'f'] '배열에는 세 개의 원소가있는 반면 다른 원소는 두 개입니까? – brk

+0

@brk 이것은 함수가있는 스레드를 기반으로 한 예제입니다. 이것은 함수가 다중 배열을 필요로한다는 것을 보여주는 예제입니다. 나는 여러 배열을 가지고 있지만 함수에 전달해야합니다. – Yanayaya

답변

1

당신은 배열을 매핑 할 수 있습니다, 당신은 갈라 값을 가지고 allPossibleCases에 대한 인수로 사용합니다.

result = allPossibleCases(array.map(a => a.value.split(','))); 

function allPossibleCases(arr) { 
 
    if (arr.length === 0) { 
 
     return []; 
 
    } 
 
    if (arr.length === 1) { 
 
     return arr[0]; 
 
    } 
 
    var result = []; 
 
    var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array 
 
    for (var c in allCasesOfRest) { 
 
     // console.log("huh?" + allCasesOfRest); 
 
     for (var i = 0; i < arr[0].length; i++) { 
 
      result.push(arr[0][i] + allCasesOfRest[c]); 
 
     } 
 
    } 
 
    return result; 
 
} 
 

 
var array = [{ key: '2', value: 'a,b,c' }, { key: '3', value: 'd,e,f' }, { key: '4', value: 'g,h,i' }], 
 
    result = allPossibleCases(array.map(a => a.value.split(','))); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

이 답변은 효과적이며 보조 분할 및 반복을 제거 할 수 있습니다. 말이된다. 감사합니다 @ NinaScholz – Yanayaya