在Google应用脚本中比较两个数组以查找相同值的最快方法

4

我有以下两个数组

bulkSheet[] - Original array
resultsArray[] -  Checking array

我正在比较'bulkSheet'数组的第一个元素和'resultArray'。以下是我目前所做的代码。它可以正常执行,但需要很长时间,并会出现“超过最大执行时间”的错误。

for(var line in bulkSheet) {
  for (var line2 in resultsArray)
  {
    if(bulkSheet[line][0] == resultsArray[line2][0])
    {
      // matched items
    }
  }
}

有没有更快的方法?

3
如何在JavaScript中比较数组? 使用JSON.stringify()将数组转换为字符串,然后比较字符串。例如:const arr1 = [1, 2, 3]; const arr2 = [1, 2, 3]; if (JSON.stringify(arr1) === JSON.stringify(arr2)) { console.log("Arrays are equal!"); } else { console.log("Arrays are not equal."); }你也可以编写自己的函数来比较数组。例如:function arraysEqual(arr1, arr2) { if (arr1.length !== arr2.length) return false; for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } const arr1 = [1, 2, 3]; const arr2 = [1, 2, 3]; if (arraysEqual(arr1, arr2)) { console.log("Arrays are equal!"); } else { console.log("Arrays are not equal."); } - gurvinder372
1
不要使用内部循环。相反,使用indexOf(value)方法。如果indexOf()的返回值为-1,则没有匹配项。如果有匹配项,则它将返回被测试数组中匹配项的索引位置。从索引号码,您可以返回该值,或者如果您希望,可以覆盖它。因此,var isMatched = secondArray.indexOf(first array循环的值); if(isMatched!== -1){var matchedValFromArray2 = arrayTwo [isMatched]}; - Alan Wells
谢谢@sandy-good,你救了我的一天! - iJay
谢谢你让我知道。人们可能参考的问题并没有展示我所解释的方法。你真的需要测试两个数组是否相同,还是需要在特定值没有匹配时让代码执行某些操作?可能存在对你需要的具体内容有些误解。就我个人而言,我不认为这个问题是重复的,并投票支持重新开放。 - Alan Wells
感谢您投票支持重新开放。我想要确定是否存在某个特定值的匹配,而您的方法使得速度更快了。我之前不知道indexOf()方法,谢谢您再次帮助,干杯! - iJay
1个回答

4

感谢@sandy-good!如果它是一个1D数组,我们可以使用indexOf()方法。

for(var line in firstArray) 
{
 var isMatched = secondArray.indexOf(firstArray[line]); 
 if (isMatched !== -1) 
 {
   var matchedValFromArray2 = secondArray[isMatched]
 };
}

如果您想比较2D数组(或电子表格的两行),可以使用.join()方法。
for(var i in firstArray)
{
  var duplicate = false;
  for(var j in secondArray)
  {
    if(firstArray[i].join() == secondArray[j].join())
    {
      var matchedValFromArray2 = firstArray[i];
      break;
    }
   }
 } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接