繁体   English   中英

寻找不同阵列中的匹配项(Google Apps脚本)

[英]Looking for matches in different arrays (Google Apps Script)

我在Google Apps脚本中有以下脚本:

 for(var i=0; i<lastCode; i++) {
  var productCode = prodCodesArr[i];
    for(var j=0; j<kelliLastCode; j++) {
     var kelliProductCode = kelliCodesArr[j];
     if(productCode == kelliProductCode) {

     Logger.log('match found')
     }
     }        
  }

2个数组是动态创建的。 所以这个想法是(而且我知道必须有更好的方法来实现这一点,但我对此很新,所以请耐心等待)我将i设置为一个数组中第一个产品代码的值然后循环另一个数组,同时将产品代码存储在这一个中。 现在,我尝试记录:

Logger.log(productCode + ' - ' + kelliProductCode);

这确实有效,并且确实存在productCode和kelliProduct代码匹配的情况。

然而我上面的if语句并没有提到这些。

再一次,我确信我已经完全拙劣,但任何帮助将不胜感激...

这样的事情可能会帮助你看到发生了什么:

function compareA(prodCodesArr,kelliCodesArr) {
  var html="";
  for(var i=0;i<prodCodesArr.length;i++) {
    for(var j=0;j<kelliCodesArr.length;j++) {
      if(productCodesArr[i]==kelliCodesArr[j]) {
        html+=Utilities.formatString('Matched: %s=%s', productCodesArr[i],kelliCodesArr[j]);
      }else{
        html+=Utilities.formatString('No-Match: %s=%s', productCodesArr[i],kelliCodesArr[j]);
      }                             
    }        
  }
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Comparing')
}

检查有什么意义? 要确定哪些prodCodesArr项目也在kelliCodesArr 为什么不解析kelliCodesArr一次,然后使用哈希查找而不是数组遍历? 这意味着您不必使用嵌套的for循环,随着内部循环大小的增加for循环的扩展性会非常差。 一个例子(对我的假设进行了一些检查):

function foo() {
  const kelliCodes = getKelliCodesArraySomehow();
  const productCodes = getProductCodesArraySomehow();

  // If these are 2D arrays, note that for `var a = ['help']; var b = ['help'];`
  // `a` is never equal to `b` because they are not the exact same object in memory.
  if (kelliCodes.length && Array.isArray(kelliCodes[0])) {
    throw new TypeError("This SO answer was predicated on `kelliCodes` and `productCodes` being 1D arrays, but they aren't!");
  }

  const kelliLookup = kelliCodes.reduce(function (obj, kpc, idx) {
    if (typeof kpc === 'object') {
      console.log({message: "This SO answer assumed kpc was a string", kpc: kpc});
      throw new TypeError("You probably want to store a property of this object, not the whole object");
    }
    obj[kpc] = idx;
    return obj;
  }, {});

  var productsAlsoInKelliCodes = productCodes.filter(function (pc) {
    return kelliLookup.hasOwnProperty(pc);
  });
  productsAlsoInKelliCodes.forEach(function (pc) {
    Logger.log("The index of this product code %s in kelliCodes is %s", pc, kelliLookup[pc]);
  });
}

如果___codes数组是2D数组,则应在比较之前将它们展平,因为将Array实例与另一个Array实例进行比较将始终返回false,即使它们包含相同的元素基元 - 它们不是完全相同的Array实例:

参考

我相信还有更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM