我正在運行這個 for 回圈并在旅途中修改一些值。它記錄在每次迭代中正確更改的值,但在寫入作業表時會重復最后一次迭代。
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)
這是日志,顯示正確的結果:

這是寫入電子表格的方式:

除了我的存在,我看不出哪里有缺陷。
謝謝你的光!
uj5u.com熱心網友回復:
嘗試改變:
itens.push(values);
到:
itens.push(values.slice());
說明
values日志會在回圈的每次迭代中向您顯示陣列的當前狀態。在下一次迭代中,您更改了陣列values。并且該陣列的所有“先前實體”也在發生變化。這就是為什么你會得到 18 個相同的陣列。因為它們都是對同一個陣列的“參考” values。
如果您想阻止“以前的實體”中的更改,您必須復制陣列的當前狀態values并放入itens此副本。該方法array.slice()回傳給定陣列的副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418040.html
標籤:
上一篇:如何將文本的行和列重新排列為一列
