google-apps-script - 谷歌脚本 .push() 复制行并添加票号
问题描述
所以我目前正在根据 uniqueIDs 生成票号。对于每个人都有一些数据,其中最重要的是[uniqueID, ticketNumber(目前为空), numberOfEntries,...]。我想要生成的是一个列表,如果有人有 3 个条目,他们将有三行,唯一的区别是票号。我希望票号的形式为 UniqueID-1、UniqueID-2、UniqueID-3 等。
到目前为止,我有这个:
function autoDup() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = [];
var temp = [];
for(var n in data){
var unID = data[n][0]; //get uniqueID from column 1
if(!Number(data[n][2])){continue};// if column 3 is not a number then do nothing
for(var c=0 ; c < Number(data[n][2]) ; c++){ //loop through the entries
temp[c] = data[n];
temp[c][1] = String(unID) + "-" + String(c+1);
Logger.log(temp[c]);
newData.push(temp[c]);//store values
Logger.log(newData);
}
}
sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);// write new data to sheet, overwriting old data
}
在执行日志中,我得到了temp[c]
生成我想要的数据,但newData.push(temp[c])
最终覆盖了以前的推送,并且我得到了为特定条目重复的相同票号。这不是我所期望的,我不明白我哪里出错了?
如果我没有解释清楚,请告诉我,我会澄清任何要点。
解决方案
我解决了,该行temp[c] = data[n];
通过引用而不是 vale 传递值,所以在推送时,它正在推送引用,这显然是错误的。因此,通过将其更改为temp[c] = [...data[n]];
我解决了问题。
推荐阅读
- c# - 计算列表中的重复项
并将它们保存在不同的文件中(或列表/数组/字符串) - python - Google App Engine Flex 是否支持 Pipfile?
- python - 如何解决与 BigQueryError 相关的问题 "reason": "invalid", "location": "test", "debugInfo": "", "message": "no such field."
- javascript - 与数组进行比较并根据值更新的代码永远不会返回更新
- python - Composer 没有看到数据流作业成功
- firebase - 如何使用 Firebase 身份验证将帐户与不同的提供商关联?
- javascript - 如何在 japi joi 中进行嵌套对象验证
- metrics - keras.metrics.AUC() 用于三元分类问题
- mdx - MDX 多个条件过滤多个维度
- javascript - 离线移动生成 6 位代码用于 2 因素身份验证