查找不同数组中的匹配项(Google Apps脚本)

时间:2019-03-22 19:13:34

标签: javascript google-apps-script google-sheets

我在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设置为一个数组中第一个产品代码的值,然后循环遍历另一个数组,同时将产品代码存储到j。现在,我尝试记录日志:

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

这确实有效,确实,在某些情况下productCode和kelliProduct代码匹配。

但是,我上面的if语句并未对此进行说明。

再次,我敢肯定我已经完全搞砸了,但是任何帮助将不胜感激...

2 个答案:

答案 0 :(得分:0)

像这样的事情可能会帮助您了解正在发生的事情:

char

答案 1 :(得分:0)

检查的重点是什么?要确定您的prodCodesArr中的哪些项目也位于kelliCodesArr中?为什么不只解析kelliCodesArr一次,然后使用哈希查找而不是数组遍历?这意味着您不必使用嵌套的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实例:

参考

我确定还有更多。