Enumerar elementos de matriz sin ciclos

29.04.19

Los ejemplos son muy abstractos, ya que los ciclos existen. Debe seleccionar todos los elementos de la matriz para un atributo dado. Hay varias soluciones.

La opción más apropiada en PHP es usar la función incorporada array_filter(). Imagina que tampoco existe. Escribimos nuestra recursión utilizando.

En PHP, la función se ve así:

function getArrayElements($arr, $pattern) {
    static $i = 0;
    static $arrayResult = array();
    if (preg_match($pattern, $arr[$i])) {
        $arrayResult[] = $arr[$i];
    }
    $i++;
    if (count($arr) == $i) {
        return;
    } else {
        getArrayElements($arr, $pattern);
    }
    return $arrayResult;
}

Ejemplo:

$arr = array('a', 'xd', 'w', 1, 'y', 'x');
$pattern = '/^x/';
print_r(getArrayElements($arr, $pattern)); // Array ( [0] => xd [1] => x )

Ahora veamos lo mismo en javascript. En JS, una matriz tiene un método de filter() similar. Intentemos prescindir de ello, usar la recursividad.

var i = 0,
    arrayResult = [];
 
function getArrayElements(arr, pattern) {
    if (pattern.test(arr[i])) {
        arrayResult.push(arr[i]);
    }
    i++;
    if (arr.length == i) {
        return;
    } else {
        getArrayElements(arr, pattern);
    }
    return arrayResult;
}

Ejemplo:

var arr = ['a', 'xd', 'w', 1, 'y', 'x'],
    pattern = /^x/;
console.log(getArrayElements(arr, pattern)); //["xd", "x"]
blog comments powered by Disqus