Javascript 检查数组中是否存在值

Javascript 检查数组中是否存在值,javascript,google-apps-script,Javascript,Google Apps Script,我有一个脚本,它查看一张表(“数据”),从一列日期中查找未来3个月的日期,并将这些行复制到另一张表(“3个月”)。它能做到,耶 我还想让它做的是检查“3个月”表中每一行的唯一ID,如果该唯一ID存在,则不要从“数据”中复制该行 它会这样做,但前提是“3个月”中的数据与“数据”中的数据顺序相同,否则不会。显然,它所做的是将当前唯一ID与数组中的等效唯一ID进行匹配。而不是尝试将当前唯一ID与数组中的所有ID进行匹配,并确保它们中的任何一个都不匹配 这就是我所拥有的: function contra

我有一个脚本,它查看一张表(“数据”),从一列日期中查找未来3个月的日期,并将这些行复制到另一张表(“3个月”)。它能做到,耶

我还想让它做的是检查“3个月”表中每一行的唯一ID,如果该唯一ID存在,则不要从“数据”中复制该行

它会这样做,但前提是“3个月”中的数据与“数据”中的数据顺序相同,否则不会。显然,它所做的是将当前唯一ID与数组中的等效唯一ID进行匹配。而不是尝试将当前唯一ID与数组中的所有ID进行匹配,并确保它们中的任何一个都不匹配

这就是我所拥有的:

function contractSearch2() {
  //Get all the sheet names as variables
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var threeMonths = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("3 Months");

  //Get all the expiry dates on the data sheet
  var lastRow = dataSheet.getLastRow();
  var endDates = dataSheet.getRange(1, 11, lastRow).getValues();

  //Get today's date
  var today = new Date();

  // Work out when 3 months from now is.
  var threeMonthsOut = new Date(today);
  var CurrentDate = new Date();
  threeMonthsOut.setMonth(CurrentDate.getMonth() + 3);

  // Find months / years that match 3 months out.
  var threeMonthslastRow = threeMonths.getLastRow();
  var CallOffIDs = threeMonths.getRange(1, 4, threeMonthslastRow+1, 1).getValues();
  var test = 0
  var j = 0; 
  //Logger.log(CallOffIDs[1])

  for (var i = 0; i < endDates.length; i++){
    var fDate = new Date(endDates[i][0]);
    // if a date is 3 months in the future
    if (fDate.getMonth() == threeMonthsOut.getMonth() && 
        fDate.getFullYear() == threeMonthsOut.getFullYear()) {
      //get all the row info
      var entry = dataSheet.getRange(i+1, 1, 1, 44).getValues();

      // Check to see if CallOff ID Exists already
      // Get the CallOff ID from the entry row
      var CallOffCheck = entry[0][3];
      ++j;
      for ( test in CallOffIDs) {
        ++test;
        if (CallOffCheck == CallOffIDs[j]) {
          break;
        } else {
          var threeMonthslastRow2 = threeMonths.getLastRow(); 
          threeMonths.getRange(threeMonthslastRow2 + 1, 1, 1, 44).setValues(entry);
          break;  
        }
      }  
    }
  }
}
函数契约搜索2(){
//将所有工作表名称作为变量获取
var dataSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“数据”);
var threeMonths=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“3个月”);
//在数据表上填写所有有效期
var lastRow=dataSheet.getLastRow();
var endDates=dataSheet.getRange(1,11,lastRow).getValues();
//得到今天的日期
var today=新日期();
//计算3个月后的时间。
var threeMonthsOut=新日期(今天);
var CurrentDate=新日期();
三个月out.setMonth(CurrentDate.getMonth()+3);
//找出与3个月匹配的月份/年份。
var threeMonthslastRow=threeMonths.getLastRow();
var CallOffIDs=threeMonths.getRange(1,4,threemonthLastRow+1,1).getValues();
var测试=0
var j=0;
//Logger.log(CallOffIDs[1])
对于(变量i=0;i
由于另一个原因,我需要对“3个月”上的行重新排序,“数据”表上的数据总是在更新,因此我需要不断运行脚本。这就是为什么我需要它来检查所有的值


提前感谢。

阵列提供四种搜索方式:

  • someArray.some
    -根据是否找到某个项目返回true或false。允许您编写一个函数来进行比较/匹配。此方法在Google Apps脚本中可用
  • someArray.find
    -从数组返回一个元素,并允许您编写一个函数来进行比较/匹配。如果存在多个匹配元素,则只返回第一个元素。此方法在Google Apps脚本中不可用
  • someArray.findIndex
    -返回数组中元素的索引,并允许您编写函数进行比较/匹配。如果存在多个匹配元素,则只返回第一个元素。此方法在Google Apps脚本中不可用
  • someArray.indexOf
    -如果未找到匹配项,则返回-1,否则返回匹配元素的基于0的索引。您必须传递一个要搜索的值,并且还可以传递数组的位置,从该位置到搜索循环。此方法在Google Apps脚本中可用
var beats=['ant','bison','camel','duck','bison'];
console.log(beats.indexOf('bison'));
//预期产出:1
//从索引2开始
console.log(beats.indexOf('bison',2));
//预期产出:4
console.log(beats.indexOf('giraffe'));
//预期产出:-1
var foundItem=beats.find(函数(项、arr、索引){
return item==“camel”;//我的函数正在搜索camel
});
console.log(foundItem);
//预期输出:“骆驼”
var foundItemIndex=beats.findIndex(函数(项、arr、索引){
return item==“camel”;//我的函数正在搜索camel
});
log(foundItemIndex);

//预期输出:2
数组提供四种搜索方式:

  • someArray.some
    -根据是否找到某个项目返回true或false。允许您编写一个函数来进行比较/匹配。此方法在Google Apps脚本中可用
  • someArray.find
    -从数组返回一个元素,并允许您编写一个函数来进行比较/匹配。如果存在多个匹配元素,则只返回第一个元素。此方法在Google Apps脚本中不可用
  • someArray.findIndex
    -返回数组中元素的索引,并允许您编写函数进行比较/匹配。如果存在多个匹配元素,则只返回第一个元素。此方法在Google Apps脚本中不可用
  • someArray.indexOf
    -如果未找到匹配项,则返回-1,否则返回匹配元素的基于0的索引。您必须传递一个要搜索的值,并且还可以传递数组的位置,从该位置到搜索循环。此方法在Google Apps脚本中可用
var beats=['ant','bison','camel','duck','bison'];
console.log(beats.indexOf('bison'));
//预期产出:1
//从索引2开始
console.log(beats.indexOf('bison',2));
//预期产出:4
console.log(beats.indexOf('g