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:
Así es como esto está escribiendo en la hoja de cálculo:
No puedo ver dónde está la falla aquí, además de mi existencia.
¡Gracias por la luz!
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.