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.

Consola de herramientas para desarrolladores mostrando solo valores finales

Tengo el siguiente código que ejecuto en la consola:

// almacenar en caché la matriz inicial – 50 elementos
let asTheyWere = selDocument.fields.field;
// crear el nuevo objeto
let nf = {};
$j.each(selDocument.fields.field[selDocument.fields.field.length – 1], function(a, b){
nf[a] = b;
});
// hacer un cambio y agregar el objeto a la matriz
for(i = 0; i < 5; i++) {
nf.name = test me ${i};
// console.log(nf.name) muestra 'test me 0', 'test me 1' … 'test me 4'
selDocument.fields.field.push(nf);
}
// asignar la matriz a una nueva variable – ahora con 55 elementos
let asTheyAre = selDocument.fields.field;
// verificar los valores
console.log(asTheyWere);
console.log(asTheyAre);

Sé que la consola no se actualiza hasta que el código se complete, por lo que todas las variables se registran con su valor final. Pensé que al usar variables diferentes evitaría eso, pero asTheyWere y asTheyAre son iguales, mostrando 55 elementos (el primero debería tener 50), Y los valores agregados al final de la matriz también son iguales: deberían ser ‘test me 0’, ‘test me 1’, ‘test me 2’, etc., pero todos son ‘test me 4’.

Cuando todo termine, ejecutar

console.log(selDocument.fields.field)

muestra ‘test me 4’ en todos los elementos agregados, por lo que no es solo el registro.

¿Qué está pasando? ¿Cómo puedo seguir el progreso y ver valores precisos, y obtener los valores correctos agregados a la matriz?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que se está utilizando el mismo objeto nf una y otra vez en el bucle, y cuando se modifica, se está modificando el mismo objeto en la memoria en lugar de crear uno nuevo. Por lo tanto, cuando se agrega nf al array repetidamente, se están agregando múltiples veces el mismo objeto, lo cual explica por qué todos los nuevos elementos tienen el mismo valor de ‘test me 4’.

    Para solucionar esto, se debe crear un nuevo objeto nf dentro del bucle en cada iteración, en lugar de utilizar el mismo repetidamente. Esto se puede hacer moviendo la línea let nf = {} dentro del bucle para que se cree un nuevo objeto cada vez.

    Para ver el progreso y ver valores precisos, se pueden agregar instrucciones de console.log dentro del bucle para rastrear los valores de nf y selDocument.fields.field en cada iteración.

    El código actualizado se vería así:

    // almacenar en caché el array de inicio - 50 elementos
    let asTheyWere = selDocument.fields.field;
    // realizar un cambio y agregar el objeto al array
    for(i = 0; i < 5; i++) {
        // crear un nuevo objeto en cada iteración
        let nf = {};
        $j.each(selDocument.fields.field[selDocument.fields.field.length - 1], function(a, b){
            nf[a] = b;
        });
        nf.name = `test me ${i}`;
        console.log(nf); // registrar nf en cada iteración
        selDocument.fields.field.push(nf);
        console.log(selDocument.fields.field); // registrar el array en cada iteración
    }
    // asignar el array a una nueva variable - ahora con 55 elementos
    let asTheyAre = selDocument.fields.field;
    // verificar los valores
    console.log(asTheyWere);
    console.log(asTheyAre);
    console.log(selDocument.fields.field); // registrar el array final
    

    Esto debería solucionar el problema de que todos los nuevos elementos tengan el mismo valor y permitir un seguimiento preciso del progreso y los valores.

Comments are closed.