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?
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 agreganf
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ínealet 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
yselDocument.fields.field
en cada iteración.El código actualizado se vería así:
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.