Javascript 为什么使用google aps脚本进行比较不起作用?
下面的代码没有给出预期的结果。Javascript 为什么使用google aps脚本进行比较不起作用?,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,下面的代码没有给出预期的结果。 比较两个区域的行,虽然第二个区域的最后一行等于第一个区域的行,但结果为false var entryValuesCom = sheet.getRange(7, 1, LastRowSource, 9).getValues(); var dbDataCom = dbSheet.getRange(2, 1, dbSheet.getLastRow(), 9).getValues(); var entryVlArray = new Array(); var dbArray
比较两个区域的行,虽然第二个区域的最后一行等于第一个区域的行,但结果为false
var entryValuesCom = sheet.getRange(7, 1, LastRowSource, 9).getValues();
var dbDataCom = dbSheet.getRange(2, 1, dbSheet.getLastRow(), 9).getValues();
var entryVlArray = new Array();
var dbArray = new Array();
for (var r = 0; r < entryValuesCom.length; r++) {
if (entryValuesCom[r][0] != '' && entryValuesCom[r][5] != 'Daily Ledger Bal') {
entryVlArray.push(entryValuesCom[r]);
}
}
for (var a = 0; a < dbDataCom.length; a++) {
if (dbDataCom[a][1] != '' && dbDataCom[a][8] == bank) {
dbArray.push(dbDataCom[a]);
}
}
var duplicate = false;
loop1:
for (var x = 0; x < entryVlArray.length; x++) {
loop2:
for (var j = 0; j < dbArray.length; j++) {
if (JSON.stringify(entryVlArray) == JSON.stringify(dbArray)) {
duplicate = true;
break loop1;
}
}
}
var entryValuesCom=sheet.getRange(7,1,LastRowSource,9).getValues();
var dbDataCom=dbSheet.getRange(2,1,dbSheet.getLastRow(),9).getValues();
var entryVlArray=新数组();
var dbArray=新数组();
对于(var r=0;r
下面是阵列的发展概况:
我用.join()
尝试过,但仍然。。。
这是针对数千行的,那么这在性能方面会做得很好吗?我相信您的目标如下
- 您希望使用Google Apps脚本比较
和entryVlArray
的数组dbArray
- 当重复的行存在于
和entryVlArray
之间时,您希望输出dbArray
duplicate=true
- 当您的脚本被修改时,在
,所有二维数组都会被比较。我认为这可能是您出现问题的原因。从您的脚本中,我认为需要比较二维数组中的每个元素if(JSON.stringify(entryVlArray)==JSON.stringify(dbArray)){
var obj = entryVlArray.reduce((o, e) => Object.assign(o, {[JSON.stringify(e)]: true}), {});
var duplicate = dbArray.some(e => obj[JSON.stringify(e)]);
太棒了!!!!有没有办法使用reduce()和some()在弹出窗口中捕获这些副本 当您想要检索重复的行时,下面的脚本如何?在本例中,我认为
filter()
比some()
更有用
修改脚本:
- 在这个修改后的脚本中,您可以在日志中看到重复的行
- 关于您期望的弹出窗口,如果您想打开一个包含重复行的对话框,在
var duplicatedRows=dbArray.filter(e=>obj[JSON.stringify(e)]行之后添加以下脚本如何;
var duplicate = false;
for (var x = 0; x < entryVlArray.length; x++) {
for (var j = 0; j < dbArray.length; j++) {
if (JSON.stringify(entryVlArray[x]) == JSON.stringify(dbArray[j])) {
duplicate = true;
break;
}
}
}
console.log(duplicate)
var duplicate = false;
loop1:
for (var x = 0; x < entryVlArray.length; x++) {
loop2:
for (var j = 0; j < dbArray.length; j++) {
if (JSON.stringify(entryVlArray) == JSON.stringify(dbArray)) {
duplicate = true;
break loop1;
}
}
}
var obj = entryVlArray.reduce((o, e) => Object.assign(o, {[JSON.stringify(e)]: true}), {});
var duplicate = dbArray.some(e => obj[JSON.stringify(e)]);
var obj = entryVlArray.reduce((o, e) => Object.assign(o, {[JSON.stringify(e)]: true}), {});
// var duplicate = dbArray.some(e => obj[JSON.stringify(e)]);
var duplicatedRows = dbArray.filter(e => obj[JSON.stringify(e)]);
console.log(duplicatedRows)
Browser.msgBox(JSON.stringify(duplicatedRows));