Encuentre todas las combinaciones de los valores de array en JavaScript

La tarea es obtener el producto cartesiano de las arrays (encontrar todas las combinaciones después de concatenarlas). Aquí, se discuten 2 enfoques con la ayuda de JavaScript.

Enfoque 1:

  • Obtenga todas las arrays en una array.
  • La recursividad se utiliza para resolver el problema. La condición base es, cuando la longitud de la array se reduce a cero, devuelve la construcción de la string hasta ahora. Más
  • Reduzca el primer elemento de la array mediante el método .reduce() y devuelva el resultado devuelto por el resultado de la recursión (se llama a la recursión cada vez que se deja el primer elemento de la array) más el valor anterior en concatenación con cada elemento de la array.
  • Devuelve la array ans final, que contiene todas las combinaciones.

Ejemplo 1: Este ejemplo implementa el enfoque anterior.

<!DOCTYPE html>
<html>
  
<head>
    <title>
        All combinations of a JavaScript array values.
    </title>
</head>
  
<body style="text-align:center;">
    <h1 style="color:green;">   
            GeeksforGeeks   
        </h1>
    <p id="GFG_UP">
    </p>
    <button id="button" onclick="GFG_Fun();">
        click here
    </button>
    <p id="GFG_DOWN">
    </p>
    <script>
        var up = document.getElementById('GFG_UP');
        var down = document.getElementById('GFG_DOWN');
        var arr = [
            ['m', 'n'],
            ['c'],
            ['d', 'e', 'f']
        ];
        up.innerHTML = "CLick on the button to get the "+
          "all combinations of arrays.<br>Array - "+
          "[[" + arr[0] + "], [" + arr[1] + "], [" + arr[2] + "]]";
  
        function getCombn(arr, pre) {
            pre = pre || '';
            if (!arr.length) {
                return pre;
            }
            var ans = arr[0].reduce(function(ans, value) {
                return ans.concat(getCombn(arr.slice(1), pre + value));
            }, []);
            return ans;
        }
  
        function GFG_Fun() {
            down.innerHTML = getCombn(arr);
        }
    </script>
</body>
  
</html>

Producción:

  • Antes de hacer clic en el botón:
  • Después de hacer clic en el botón:

Enfoque 2:

  • Obtenga todas las arrays en una array.
  • La recursividad se utiliza para resolver el problema. La condición base es: cuando la longitud de la array se reduce a uno, se devuelve ese elemento de la array. Más
  • Llame a la recursión después de dejar el primer elemento de la array y almacene el resultado en la variable (otros casos).
  • Recorre todos los elementos de Array(otherCases) y dentro de cada elemento recorre el primer elemento de Array(arr).
  • Concatene todos los elementos de Array(arr[0]) con Array(otherCases) y envíe el resultado a la array de respuesta.

Ejemplo 2: Este ejemplo implementa el enfoque anterior.

<!DOCTYPE html>
<html>
  
<head>
    <title>
        all combinations of a JavaScript array values.
    </title>
</head>
  
<body style="text-align:center;">
    <h1 style="color:green;">   
            GeeksforGeeks   
        </h1>
    <p id="GFG_UP">
    </p>
    <button id="button" onclick="GFG_Fun();">
        click here
    </button>
    <p id="GFG_DOWN">
    </p>
    <script>
        var up = document.getElementById('GFG_UP');
        var down = document.getElementById('GFG_DOWN');
        var arr = [
            ['m', 'n'],
            ['c'],
            ['d', 'e', 'f']
        ];
        up.innerHTML = "CLick on the button to get the all "+
          "combinations of arrays.<br>Array -"+
          "[[" + arr[0] + "], [" + arr[1] + "], [" + arr[2] + "]]";
  
        function getCombn(arr) {
            if (arr.length == 1) {
                return arr[0];
            } else {
                var ans = [];
                
                // recur with the rest of the array.
                var otherCases = getCombn(arr.slice(1)); 
                for (var i = 0; i < otherCases.length; i++) {
                    for (var j = 0; j < arr[0].length; j++) {
                        ans.push(arr[0][j] + otherCases[i]);
                    }
                }
                return ans;
            }
        }
  
        function GFG_Fun() {
            down.innerHTML = getCombn(arr);
        }
    </script>
</body>
  
</html>

Producción:

  • Antes de hacer clic en el botón:
  • Después de hacer clic en el botón:

Publicación traducida automáticamente

Artículo escrito por PranchalKatiyar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *