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)]行之后添加以下脚本如何;


    请添加一个包含示例数据的示例。太棒了!!!!是否有办法使用reduce()和some()在弹出窗口中捕获这些重复项?@Antonio Santos感谢您的回复。我很高兴您的问题得到了解决。关于您的第二个问题,我又添加了一个示例脚本作为答案。您能确认一下吗?如果这不是您期望的方向,我道歉。
    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));