How can I create every combination possible for the contents of two arrays?

前端 未结 10 1446
南旧
南旧 2020-11-27 20:44

I have two arrays:

var array1=[\"A\",\"B\",\"C\"];

var array2=[\"1\",\"2\",\"3\"];

How can I set another array to contain every combinatio

10条回答
  •  悲&欢浪女
    2020-11-27 21:42

    Part II: After my complicated iterative "odometer" solution of July 2018, here's a simpler recursive version of combineArraysRecursively()...

    function combineArraysRecursively( array_of_arrays ){
    
            // First, handle some degenerate cases...
    
            if( ! array_of_arrays ){
                // Or maybe we should toss an exception...?
                return [];
            }
    
            if( ! Array.isArray( array_of_arrays ) ){
                // Or maybe we should toss an exception...?
                return [];
            }
    
            if( array_of_arrays.length == 0 ){
                return [];
            }
    
            for( let i = 0 ; i < array_of_arrays.length; i++ ){
                if( ! Array.isArray(array_of_arrays[i]) || array_of_arrays[i].length == 0 ){
                    // If any of the arrays in array_of_arrays are not arrays or are zero-length array, return an empty array...
                    return [];
                }
            }
    
            // Done with degenerate cases...
            let outputs = [];
    
            function permute(arrayOfArrays, whichArray=0, output=""){
    
                arrayOfArrays[whichArray].forEach((array_element)=>{
                    if( whichArray == array_of_arrays.length - 1 ){            
                        // Base case...
                        outputs.push( output + array_element );
                    }
                    else{
                        // Recursive case...
                        permute(arrayOfArrays, whichArray+1, output + array_element );
                    }
                });/*  forEach() */
            }
    
            permute(array_of_arrays);
    
            return outputs;
            
    
    }/* function combineArraysRecursively() */
    
    const array1 = ["A","B","C"];
    const array2 = ["+", "-", "*", "/"];
    const array3 = ["1","2"];
    
    console.log("combineArraysRecursively(array1, array2, array3) = ", combineArraysRecursively([array1, array2, array3]) );

提交回复
热议问题