• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

178
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error