validacion recorrer objetos objeto lista formularios ejemplos con buscar array agregar javascript arrays repeat

objetos - recorrer objeto javascript



Repita una matriz con múltiples elementos varias veces en JavaScript (7)

En JavaScript, ¿cómo puedo repetir una matriz que contiene varios elementos, de manera concisa?

En Ruby, podrías hacer

irb(main):001:0> ["a", "b", "c"] * 3 => ["a", "b", "c", "a", "b", "c", "a", "b", "c"]

Busqué en la biblioteca de lodash y no encontré nada que fuera directamente aplicable. Solicitud de características: repetir matrices. es una solicitud de función para agregarla a lodash, y la mejor solución dado que existe

const arrayToRepeat = [1, 2, 3]; const numberOfRepeats = 3; const repeatedArray = _.flatten(_.times(numberOfRepeats, _.constant(arrayToRepeat)));

Las preguntas ¿ La forma más eficiente de crear una matriz de JavaScript rellena con cero? y Crear una matriz con el mismo elemento que se repite varias veces, centrándose en repetir solo un elemento varias veces, mientras que quiero repetir una matriz que tenga varios elementos.

Usar bibliotecas razonablemente bien mantenidas es aceptable.


Además de la [].concat obvia [].concat + Array.from({length: 3}, …) / fill() , el uso de generadores con código generará un código elegante:

function* concat(iterable) { for (const x of iterable) for (const y of x) yield y; } function* repeat(n, x) { while (n-- > 0) yield x; } const repeatedArray = Array.from(concat(repeat(3, [1, 2, 3])));

También puedes acortarlo a

function* concatRepeat(n, x) { while (n-- > 0) yield* x; } const repeatedArray = Array.from(concatRepeat(3, [1, 2, 3]));


Alternativa recursiva:

const repeat = (a, n) => n-- ? a.concat(repeat(a, n)) : []; console.log( repeat([1, 2], 3) )


Aunque otros métodos funcionan simplemente, estos también.

Array.fill() y Array.from() en métodos anteriores no funcionarán en IE . MDN Docs para referencia

Mehtod 1 : Loop y push ( Array.prototype.push ) lo mismo en la matriz.

function mutateArray(arr,n) { var temp = []; while(n--) Array.prototype.push.apply(temp,arr); return temp; } var a = [1,2,3,4,5]; console.log(mutateArray(a,3));

Método 2 : une los elementos de la matriz y String.repeat() para mutar la cadena y devolver la cadena dividida.

Nota : el método de repeat aún no es compatible con Android webviews IE y Android webviews .

function mutateArray(arr,n) { var arr = (arr.join("$")+"$").repeat(n).split("$"); arr.pop(); //To remove the last empty element return arr; } var a = [1,2,3,4,5]; console.log(mutateArray(a,3));


Desafortunadamente, no es posible de forma nativa en JS (tampoco es posible la sobrecarga del operador, por lo que no podemos usar algo como Array.prototype.__mul__ ), pero podemos crear un Array con la longitud objetivo adecuada, rellenar con marcadores de posición y luego volver a mapear los valores:

const seqFill = (filler, multiplier) => Array(filler.length * multiplier) .fill(1) .map( (_, i) => filler[i % filler.length] ); console.log(seqFill([1,2,3], 3)); console.log(seqFill([''a'',''b'',''c'', ''d''], 5));

O de otra manera, conectándose al prototipo de Array, puede usar la sintaxis de Array#seqFill(multiplier) , esta es probablemente la más cercana a la sintaxis de ruby ​​(rb puede hacer básicamente todo con sobrecarga de operadores, pero JS no puede) :

Object.defineProperty(Array.prototype, ''seqFill'', { enumerable: false, value: function(multiplier) { return Array(this.length * multiplier).fill(1).map((_, i) => this[i % this.length]); } }); console.log([1,2,3].seqFill(3));


Mi primera idea sería crear una función como esta.

let repeat = (array, numberOfTimes) => Array(numberOfTimes).fill(array).reduce((a, b) => [...a, ...b], []) console.log(repeat(["a", "b", "c"], 3))

utilizando el método de fill y reduce

Lo ideal sería que, en lugar de usar Reducir, pudieras usar el flatten pero aún no hay soporte en los navegadores.


No necesita ninguna biblioteca, puede usar Array.from para crear una matriz de arrays que quiera repetir, y luego aplanar usando [].concat y diseminar:

const makeRepeated = (arr, repeats) => [].concat(...Array.from({ length: repeats }, () => arr)); console.log(makeRepeated([1, 2, 3], 2));

En los navegadores más nuevos, puede usar Array.prototype.flat lugar de [].concat(... :

const makeRepeated = (arr, repeats) => Array.from({ length: repeats }, () => arr).flat(); console.log(makeRepeated([1, 2, 3], 2));


Puede usar el constructor de Array junto con su método de relleno para rellenarlo varias veces de la matriz que desea repetir y luego concat (las subarrays) en una sola matriz:

const repeatedArray = [].concat(...Array(num).fill(arr));

Nota: En los navegadores más antiguos (pre-ES6), puede usar la Function#apply para imitar la sintaxis restante (se llamará concat con cada una de las matrices secundarias que se le pasan como argumento):

var repeatedArray = [].concat.apply([], Array(num).fill(arr));

Ejemplo:

const arrayToRepeat = [1, 2, 3]; const numberOfRepeats = 3; const repeatedArray = [].concat(...Array(numberOfRepeats).fill(arrayToRepeat)); console.log(repeatedArray);