Como rellenar el array de otra forma?

publicado por: Anonymous

_x000D_

_x000D_

window.addEventListener("load", function(){_x000D_
  _x000D_
  // Para uso_x000D_
  var matriz = [];_x000D_
  var i = 0;_x000D_
  _x000D_
  for (i; i<=50; ++i) {_x000D_
    _x000D_
    matriz.push(i);_x000D_
    _x000D_
  }_x000D_
  _x000D_
  matriz.forEach(function(e) {_x000D_
    _x000D_
    document.write(e + 'n');_x000D_
  });_x000D_
  _x000D_
});

_x000D_

<!DOCTYPE html>_x000D_
<html>_x000D_
<head>_x000D_
  <meta charset="utf-8">_x000D_
  <meta name="viewport" content="width=device-width">_x000D_
  <title>JS Bin</title>_x000D_
</head>_x000D_
<body>_x000D_
_x000D_
</body>_x000D_
</html>

_x000D_

_x000D_

_x000D_

Realizo un for para rellenar el array con 50 numeros y así luego mostrar por pantalla todo el array con forEach, pero como podría rellenar el array sin bucles?(pero si usar el forEach para mostrar los números)

solución

Si los números tienen que ser consecutivos podrías hacer algo así:

_x000D_

_x000D_

window.addEventListener("load", function(){_x000D_
  _x000D_
  // Para uso_x000D_
  var matriz = Array.apply(null, {length: 50}).map(Number.call, Number);_x000D_
  _x000D_
  matriz.forEach(function(e) {_x000D_
    _x000D_
    document.write(e + 'n');_x000D_
  });_x000D_
  _x000D_
});

_x000D_

<!DOCTYPE html>_x000D_
<html>_x000D_
<head>_x000D_
  <meta charset="utf-8">_x000D_
  <meta name="viewport" content="width=device-width">_x000D_
  <title>JS Bin</title>_x000D_
</head>_x000D_
<body>_x000D_
_x000D_
</body>_x000D_
</html>

_x000D_

_x000D_

_x000D_

El constructor del objeto Array básicamente lo que hace es (el código está simplificado para que se entienda mejor):

function Array() {
  var a = [];
  for (var i = 0; i < arguments.length; i++) {
     a.push(arguments[i]);
  }
  return a;
}

Al pasarle al apply un objeto con una propiedad length igual a la longitud deseada (50) en lugar de un array de argumentos lo que conseguimos es:

function Array() {
  var a = [];
  for (var i = 0; i < 50; i++) {
     a.push(undefined);
  }
  return a;
}

Lo que crea un Array de 50 posiciones con todos sus valores inicializados como undefined.

La llamada al método map provoca que se llame a la función de callback pasada como argumento (en nuestro caso Number.call) una vez por cada elemento del array pasándole 3 argumentos: el valor actual del elemento, el índice o posición dentro del array y el propio array.

Es decir, por ejemplo para el elemento de la 5ª posición del array (índice 4) la llamada será:

Number.call(undefined, 4, [0,1,2,3,undefined,undefined,....]);

Lo que vendría a ser equivalente a llamar a:

Number(4) // Que va a devolver 4
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *