es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Solo se agrega el último elemento al array?

Cuando estoy agregando elementos a un arreglo, ¿solo se agrega el último elemento al arreglo? No puedo encontrar qué está mal en el cierre.

const data = require('../content/data')

function randomize() {
    const ds_size = Math.floor(Math.random() * 500) + 50 //Generar número de objetos en el flujo
    let name_index = 0
    let origin_city_index = 0
    let destination_city_index = 0
    let org_message = {
      name: '',
      origin: '',
      destination: ''
    }
    let ds = [];
    return function getDs() {
      for(let i = 0; i < ds_size; i++) {
        name_index = Math.floor(Math.random() * data.names.length)
        origin_city_index = Math.floor(Math.random() * data.cities.length)
        destination_city_index = Math.floor(Math.random() * data.cities.length)
        org_message.name = data.names[name_index]
        org_message.origin = data.cities[origin_city_index]
        org_message.destination = data.destination[destination_city_index]
        ds.push(org_message)
      }
      return ds
    }
}

module.exports = {randomize}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que el objeto org_message se está reutilizando y actualizando en cada iteración del bucle for antes de ser añadido al array ds. Esto significa que cada objeto en el array ds tendrá los mismos valores que el último valor asignado a org_message.

    Para solucionar esto, puedes crear un nuevo objeto en cada iteración del bucle usando la desestructuración de objetos o el operador de expansión:

    function randomize() {
      const ds_size = Math.floor(Math.random() * 500) + 50;
      let ds = [];
    
      return function getDs() {
        for (let i = 0; i < ds_size; i++) {
          const name_index = Math.floor(Math.random() * data.names.length);
          const origin_city_index = Math.floor(Math.random() * data.cities.length);
          const destination_city_index = Math.floor(Math.random() * data.cities.length);
    
          const org_message = {
            name: data.names[name_index],
            origin: data.cities[origin_city_index],
            destination: data.destination[destination_city_index]
          };
    
          ds.push(org_message);
        }
    
        return ds;
      }
    }
    
    module.exports = { randomize };
    

    Al crear un nuevo objeto en cada iteración del bucle, cada objeto añadido al array ds tendrá valores únicos.

Comments are closed.