Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

223
Visualizações
La mejor manera de crear una matriz a partir de un objeto que tiene varias copias

De un objeto como este:

 {a:1, b: 2, c: 3}

me gustaría convertirme

 ['a', 'b', 'b', 'c', 'c', 'c']

Donde la clave es la cadena y el valor es el número de copias, el orden no importa.

¿Cuál es la mejor manera de hacer esto?

Estaba pensando en usar array.fill, pero no estoy seguro de si eso es realmente más fácil que simplemente iterar y empujar.

Editar: Actualmente esto:

 const arr = [] _.each(obj, function (v, k) { _.times(v, function () { arr.push(k) }) })
about 4 years ago · Santiago Gelvez
3 Respostas
Responde à pergunta

0

Puede hacer un flatMap las entradas de Object.entries y fill una matriz de cada tamaño.

 const obj = { a: 1, b: 2, c: 3 }; const result = Object.entries(obj).flatMap(([k, v]) => Array(v).fill(k)); console.log(result)

o con Lodash

 const obj = { a: 1, b: 2, c: 3 }; const arr = _.flatMap(obj, (v,k) => Array(v).fill(k)) console.log(arr);
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

Pero no hay nada como un bucle simple

 const obj = { a: 1, b: 2, c: 3 }; const result = [] for (let [k, v] of Object.entries(obj)) { while (v--) { result.push(k) } } console.log(result)

about 4 years ago · Santiago Gelvez Relatório

0

Puede usar Object.entries y Array#reduce de la siguiente manera:

 const input = {a:1, b: 2, c: 3}; const output = Object.entries(input).reduce( (prev, [key,value]) => prev.concat( Array(value).fill(key) ), [] ); console.log( output );

O, usando Array#push en lugar de Array#concat ,

 const input = {a:1, b: 2, c: 3}; const output = Object.entries(input).reduce( (prev, [key,value]) => prev.push( ...Array(value).fill(key) ) && prev, [] ); console.log( output );

O, usando bucles for ,

 const input = {a:1, b: 2, c: 3}; const output = [], pairs = Object.entries(input); for(let i = 0; i < pairs.length; i++) { const [key, value] = pairs[i]; for(let j = 0; j < value; j++) { output.push( key ); } } console.log( output );

about 4 years ago · Santiago Gelvez Relatório

0

Convertiría el objeto en una matriz de claves usando Object.keys y luego usaría una matriz de resultados vacía recién creada, luego mapearía a través de las claves.

Para cada clave, agregaría una matriz de relleno a los resultados existentes.

Aquí está la solución ES6 para eso (no se requieren bibliotecas adicionales)

 const obj = { a: 1, b: 2, c: 3 }; let result = [] Object.keys(obj).forEach(key => { result = [...result, ...new Array(obj[key]).fill(key)] }) console.log(result)

about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda