gpt4 book ai didi

javascript - 根据 IF 语句测试范围值数组的最佳方法

转载 作者:行者123 更新时间:2023-12-01 01:05:45 26 4
gpt4 key购买 nike

作为为我的组织构建电子表格工具的一部分,我需要尽可能多地验证该工具,这意味着在允许函数运行之前检查一些条件。我有一个正在运行的代码版本,但我想知道是否有办法优化它。

在下面的代码中,我使用 for 循环来检查 B 列中的行是否具有空值,而同一行上的 C、D、E 或 F 列中是否有某些值。

如果条件至少为真一次,那么我们将停止循环并提醒用户。如果数组通过检查,那么我们在循环末尾执行一些操作。

我们能完全避免循环吗?如何优化代码?

我做了一些研究,但考虑到 Google Apps 脚本中一系列值的数组结构,.every 或 .some 似乎并不能解决问题。

这是我感兴趣的部分的代码摘要:

function myFunc() {
var sheet = SpreadsheetApp.getActiveSpreadsheet(),
bench = sheet.getSheets()[0].getRange('B1:F14').getValues();

for (var c = 0; c < bench.length; c++) {

var check = bench[c];

if (check[0] === '' && ((check[1] || check[2] || check[3] || check[4]) != '')) { // check if a row in Col B as an empty value while having a value in Col C,D,E or F

SpreadsheetApp.getUi().alert("line " + (c + 1) + " has no company name");
break;

} else { // everything pitchy

if (c == (bench.length - 1)) {

//Function run normaly

}

}

}

}

最佳答案

只有当前面的数据不影响后续数据时,您才能使用您的代码,并且无论循环何时中断,您都可以编辑数据。

在这种情况下,您可以通过尽早保留嵌套条件来简化代码的外观:

function myFunc() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var bench = sheet
.getSheets()[0]
.getRange('B1:F14')
.getValues();
var client = bench[1][0];

if (client === '') {
// check if client name is not empty
SpreadsheetApp.getUi().alert('client is empty');
return;
}

for (var c = 0; c < bench.length; c++) {
var check = bench[c];

if (
check[0] === '' &&
[check[1], check[2], check[3], check[4]].join('') !== ''
) {
// check if a row in Col B as an empty value while having a value in Col C,D,E or F

SpreadsheetApp.getUi().alert('line ' + (c + 1) + ' has no company name');
break;
}
// everything pitchy

if (c == bench.length - 1) {
// Function run normaly
}
}
}

否则,最好提前检查数据并使用有效的数组:

function myFunc() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var bench = sheet
.getSheets()[0]
.getRange('B1:F14')
.getValues();
var client = bench[1][0];

if (client === '') {
// check if client name is not empty
SpreadsheetApp.getUi().alert('client is empty');
return;
}

var chcker = bench
.filter(function(check) {
return (
check[0] === '' &&
[check[1], check[2], check[3], check[4]].join('') !== ''
);
})
.map(function(_, i) {
return 'line ' + (i + 1) + ' has no company name';
});
if (chcker.length) {
SpreadsheetApp.getUi().alert(chcker.join('\n'));
return;
}

for (var c = 0; c < bench.length; c++) {
if (c == bench.length - 1) {
// Function run normaly
}
}
}

如果您不想循环所有内容,可以添加 findIndex polyfill

var chcker = bench
.findIndex(function(check) {
return (
check[0] === '' &&
[check[1], check[2], check[3], check[4]].join('') !== ''
);
});
if(chcker !== -1) { // The data invalid

关于javascript - 根据 IF 语句测试范围值数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55664866/

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