如何以特定格式将多个数组传递给我的函数?

时间:2017-05-12 09:07:44

标签: javascript arrays permutation

我一直在javascript中进行排列,这样我就可以联系到与字母相对应的数字,例如电话键盘。我想要做的是将那些与密钥相对应的字母拆分成一个数组并将这些数组传递给一个函数来查找所有可能的排列或组合。

让我们看看到目前为止的情况。我将数字和字母存储为数组

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

然后我想迭代这个数组并抓住与密钥相反的字母。

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

这给了我分成["a", "b", "c"]的字母,所以现在我想把这些多个数组传递给一个寻找所有组合的函数。这是我从这个帖子得到的一个函数: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;
              }
            }

此函数要求数组的格式类似于

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

所以我的问题是如何以正确的格式将新分割的数组传递给此函数,以及我应该在什么时候进行此操作?我应该在数组的迭代循环中执行此操作吗?

到目前为止,这是我的完整代码,我还没有开始工作。

 $(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;
      }
    }

1 个答案:

答案 0 :(得分:1)

您可以使用拆分值映射数组,并将其用作allPossibleCases的参数。

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

&#13;
&#13;
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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;