• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

183
Vistas
¿Por qué esto es correcto para el registro de bucle, pero escribe incorrectamente en la hoja usando GAS?

Estoy ejecutando este bucle for y modificando algunos valores sobre la marcha. Registra los valores cambiados correctamente en cada iteración, pero repite la última iteración al escribir en las hojas.

 const rngList = cadSheet.getRangeList(dataRng).getRanges(); //Gets the ranges' values and push them into an array; let values = []; for (let i = 0; i < rngList.length; i++) { values = [].concat(values, rngList[i].getValues().flat()); //values.push([rngList[i].getValue()]); } let itens = []; for (let a = 0; a < tamanhosEscArr.length; a++) { for (let r = 0; r < coresEscArr.length; r++) { values[4] = variacao++;//Increments an ID number values.splice(29, 1); //removes this element values.splice(29, 0, tamanhosEscArr[a]); //inserts size being iterated over values.splice(30, 1);//removes this element values.splice(30, 0, coresEscArr[r]); //inserts color being iterated over Logger.log('Item: ' + values) //logs all 18 or so items, with their corresponding sizes and colors itens.push(values); } } suporteSheet.getRange(suporteSheet.getLastRow() + 1, 1, itens.length, itens[0].length).setValues(itens); //Writes the last iteration as many times as the iterations (18)

Este es el registro, que muestra el resultado correcto: ingrese la descripción de la imagen aquí

Así es como esto está escribiendo en la hoja de cálculo: ingrese la descripción de la imagen aquí

No puedo ver dónde está la falla aquí, además de mi existencia.

¡Gracias por la luz!

almost 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Trata de cambiar:

 itens.push(values);

a:

 itens.push(values.slice());

explicación

Log le muestra el estado actual de los values de la matriz en cada iteración del bucle. Durante la siguiente iteración, cambia los values de la matriz. Y todas las 'instancias anteriores' de la matriz también están cambiando. Es por eso que obtienes las 18 matrices idénticas. Porque todos ellos son 'referencias' a los mismos values de matriz.

Si desea evitar los cambios en las 'instancias anteriores', debe hacer una copia del estado actual de los values de la matriz y colocar los itens en esta copia. El método array.slice() devuelve una copia de una matriz dada.

almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda