recorrer - tablas dinamicas html javascript
¿Cómo generar secuencia de números/caracteres en javascript? (10)
¿Por qué no solo unir y dividir?
function seq(len, value)
{
// create an array
// join it using the value we want
// split it
return (new Array(len + 1)).join(value).split("");
}
seq(10, "a");
["a", "a", "a", "a", "a", "a", "a", "a", "a", "a"]
seq(5, 1);
["1", "1", "1", "1", "1"]
¿Hay una manera de generar secuencia de caracteres o números en javascript?
Por ejemplo, quiero crear una matriz que contenga ocho 1s. ¿Puedo hacerlo con for loop, pero me pregunto si hay una biblioteca jQuery o una función javascript que pueda hacerlo por mí?
2016 - La funcionalidad del navegador moderno ha llegado. No hay necesidad de jQuery todo el tiempo.
function make_sequence (value, increment)
{
if (!value) value = 0;
if (!increment) increment = function (value) { return value + 1; };
return function () {
let current = value;
value = increment (value);
return current;
};
}
i = make_sequence()
i() => 0
i() => 1
i() => 2
j = make_sequence(1, function(x) { return x * 2; })
j() => 1
j() => 2
j() => 4
j() => 8
Puede sustituir la función de flecha con una simple función de devolución de llamada para alcanzar un rango ligeramente más amplio de navegadores compatibles. Es, al menos para mí, la forma más fácil de iterar sobre una matriz inicializada en un solo paso.
Nota: IE no es compatible con esta solución, pero hay un polyfill para eso en developer.mozilla.org/...
En caso de que esté utilizando una nueva sintaxis de Javascript, se puede lograr lo mismo usando:
Array(8).fill(1)
Lo siguiente también funciona bien, pero como señalan otros, la palabra clave ''nuevo'' es redundante.
new Array(8).fill(1)
Método de mecanografía basado en el código de Ariya Hidayat:
/**
* Generates sequence of numbers from zero.
* @ param {number} count Count of numbers in result array.
* @ return {Array<number>} Sequence of numbers from zero to (count - 1).
*/
public static sequence(count: number): Array<number>
{
return Array.apply(0, Array(count)).map((x, i) =>
{
return i;
});
}
Puedes hacer tu propia función reutilizable, supongo, para tu ejemplo:
function makeArray(count, content) {
var result = [];
if(typeof content == "function") {
for(var i = 0; i < count; i++) {
result.push(content(i));
}
} else {
for(var i = 0; i < count; i++) {
result.push(content);
}
}
return result;
}
Entonces podrías hacer cualquiera de estas cosas:
var myArray = makeArray(8, 1);
//or something more complex, for example:
var myArray = makeArray(8, function(i) { return i * 3; });
Puede intentarlo aquí , tenga en cuenta que el ejemplo anterior no se basa en jQuery en absoluto, por lo que puede usarlo sin él. Simplemente no ganas nada de la biblioteca por algo como esto :)
Sin un bucle for, aquí hay una solución:
Array.apply(0, Array(8)).map(function() { return 1; })
La explicación sigue.
Array(8)
produce una matriz dispersa con 8 elementos, todos undefined
. El truco de apply
lo convertirá en una matriz densa. Finalmente, con map
, reemplazamos ese valor undefined
(el mismo) de 1
.
Una secuencia es una secuencia, que calcula el valor cuando es necesario. Esto requiere solo un poco de memoria pero más tiempo de CPU cuando se usan los valores.
Una matriz es una lista de valores precomputados. Esto lleva algún tiempo antes de que se pueda usar el primer valor. Y requiere mucha memoria, porque todos los valores posibles de la secuencia deben almacenarse en la memoria. Y tienes que definir un límite superior.
Esto significa que, en la mayoría de los casos, no es una buena idea crear una matriz con valores de secuencia. En su lugar, es mejor implementar la secuencia como una secuencia real, que está limitada solo por la longitud de palabra de la CPU.
Array.from({length: 8}, (el, index) => 1);
Utilizando Jquery:
$.map($(Array(8)),function(val, i) { return i; })
Esto devuelve:
[0, 1, 2, 3, 4, 5, 6, 7]
$.map($(Array(8)),function() { return 1; })
Esto devuelve:
[1, 1, 1, 1, 1, 1, 1, 1]
The fastest way to define an array of 8 1s is to define it-
var A= [1, 1, 1, 1, 1, 1, 1, 1];
// You''d have to need a lot of 1s to make a dedicated function worthwhile.
// Maybe in the Matrix, when you want a lot of Smiths:
Array.repeat= function(val, len){
for(var i= len, a= []; i--; ) a[i]= val;
return a;
}
var A= Array.repeat(''Smith'',100)
/* returned value: (String)
Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith, Smith
*/
for (var i=8, a=[]; i--;) a.push(1);