gpt4 book ai didi

javascript - 检查某个值是否存在于数组中的任何位置

转载 作者:行者123 更新时间:2023-12-01 02:03:44 24 4
gpt4 key购买 nike

我有一个脚本,它查看一张工作表(“数据”),并从一列日期中查找 3 个月后的日期,并将这些行复制到另一张工作表(“3 个月”)中。它可以做到这一点,耶!

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

它会这样做,但前提是“3 Months”上的数据与“Data”中的数据顺序相同,否则不会。显然,它所做的是将当前唯一 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;
}
}
}
}
}

由于我需要出于其他原因对“3 个月”上的行重新排序,并且“数据”表上的数据始终在更新,因此我需要不断运行脚本。这就是为什么我需要它来检查所有值。

提前致谢。

最佳答案

Array提供了四种搜索方式:

  • someArray.some - 根据是否找到项目返回 true 或 false。让您编写一个函数来进行比较/匹配。 Google Apps 脚本中提供了此方法。
  • someArray.find - 从数组返回一个元素,并让您编写一个函数来进行比较/匹配。如果存在多个匹配元素,则仅返回第一个。此方法在 Google Apps 脚本中可用。
  • someArray.findIndex - 返回数组中元素的索引,并允许您编写一个函数来进行比较/匹配。如果存在多个匹配元素,则仅返回第一个。此方法在 Google Apps 脚本中可用。
  • someArray.indexOf - 如果未找到匹配项,则返回 -1,否则返回匹配元素的基于 0 的索引。您必须传递一个值来搜索,并且还可以传递作为搜索循环的数组位置。 Google Apps 脚本中提供了此方法。

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));
// expected output: 1

// start from index 2
console.log(beasts.indexOf('bison', 2));
// expected output: 4

console.log(beasts.indexOf('giraffe'));
// expected output: -1

var foundItem = beasts.find(function(item, arr, index) {
return item === 'camel'; // my function is searching for camel
});
console.log(foundItem);
// expected output: 'camel'


var foundItemIndex = beasts.findIndex(function(item, arr, index) {
return item === 'camel'; // my function is searching for camel
});
console.log(foundItemIndex);
// expected output: 2

我希望这会有所帮助。

关于javascript - 检查某个值是否存在于数组中的任何位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50295247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com