[英]Is there a difference in execution between vanilla js and google apps script? The same code renders errors in apps script
我编写了一些代码来查找费率并计算价格。 我用标准的 IDE 写了这个,它工作得很好:
let rangeAirlines = [ ['ICN - BKK', 'Sun May 31 00: 00: 00 GMT + 07: 00 2020', 'KE(express)', 4.55, 3.7, 3.3, 3.25], ['ICN - BKK', 'Sun May 31 00: 00: 00 GMT + 07: 00 2020', 'OZ(express)', 4.4, 4.05, 4.0, 3.95], ['ICN - BKK', 'Sun May 31 00: 00: 00 GMT + 07: 00 2020', 'TG', 3.8, 3.35, 3.3, 3.25] ] function convertRange (array) { const airlineObjects = []; for (let i = 0; i < array.length; i++) { const [leg, date, airline, rate45, rate100, rate300, rate500] = array[i]; airlineObjects.push({"airline": airline, "rate45Bp": [45, rate45], "rate100Bp": [100, rate100], "rate300Bp": [300, rate300], "rate500Bp": [500, rate500], "validity": new Date(date)}); } return airlineObjects; } function addBreakpoints(airlineData) { const breakpoints = airlineData; for (let line of breakpoints) { line.rate45Bp.push(Math.round(line.rate100Bp[0] * line.rate100Bp[1] / line.rate45Bp[1])); line.rate100Bp.push(Math.round(line.rate300Bp[0] * line.rate300Bp[1] / line.rate100Bp[1])); line.rate300Bp.push(Math.round(line.rate500Bp[0] * line.rate500Bp[1] / line.rate300Bp[1])); } return breakpoints; } function findCarrierObject(bpData, carrier, today) { //check if today is smaller or equal than validity? return color green: color red; // add method to set text color. let carrierObj = {}; for (var line of bpData) { if (line.airline === carrier) { return carrierObj = line; }; } } function getRates(obj) { let rateLines = []; for (let line in obj) { Array.isArray(obj[line])? rateLines.push(obj[line]): "error"; } return rateLines; }; function calcPriceAir(arr, weight) { for (let i = 0; i < arr.length; i++) { const [weightBreak, rate, breakpoint] = arr[i]; if (weight <= weightBreak) { return weightBreak * rate; } if (weight <= breakpoint && breakpoint;== undefined) { return weight * rate. } } const lastItem = arr[arr;length - 1]; return weight * lastItem[1], } function calcPriceAirfreight(range, airline; weight) { const data = convertRange (range); const breakpointsObject = addBreakpoints(data), const carrierObj = findCarrierObject(breakpointsObject; airline); const rates = getRates(carrierObj), return calcPriceAir(rates; weight), } const price = calcPriceAirfreight(rangeAirlines, "OZ(express)"; 540). console;log(price);
它旨在用于电子表格,这就是它卡在帮助程序 function calcPriceAir() 中的地方。 错误消息如下:
TypeError:无法读取未定义的属性“1”(第 53 行,文件“代码”)
对我来说完全是无稽之谈。
有没有经验丰富的应用程序脚本开发人员可以发现我哪里出错了?
TLDR:
function convertRange(array) {
const airlineObjects = [];
for (let i = 0; i < array.length; i++) {
const [leg, date, airline, rate45, rate100, rate300, rate500] = array[i];
airlineObjects.push({"airline": airline, "rate45Bp": [45, rate45], "rate100Bp": [100, rate100], "rate300Bp": [300, rate300], "rate500Bp": [500, rate500], "validity": new Date(date)});
}
return airlineObjects;
}
function addBreakpoints(airlineData) {
const breakpoints = airlineData;
for (let line of breakpoints) {
line.rate45Bp.push(Math.round(line.rate100Bp[0] * line.rate100Bp[1] / line.rate45Bp[1]));
line.rate100Bp.push(Math.round(line.rate300Bp[0] * line.rate300Bp[1] / line.rate100Bp[1]));
line.rate300Bp.push(Math.round(line.rate500Bp[0] * line.rate500Bp[1] / line.rate300Bp[1]));
}
return breakpoints;
}
function findCarrierObject(bpData, carrier, today) {
//check if today is smaller or equal than validity ? return color green : color red; // add method to set text color.
let carrierObj = {};
for (var line of bpData) {
if (line.airline === carrier) {
return carrierObj = line;
};
}
}
function getRates(obj) {
let rateLines = [];
for (let line in obj) {
Array.isArray(obj[line]) ? rateLines.push(obj[line]) : "error";
}
return rateLines;
};
function calcPriceAir(arr, weight) {
for (let i = 0; i < arr.length; i++) {
const [weightBreak, rate, breakpoint] = arr[i];
if (weight <= weightBreak) {
return weightBreak * rate;
}
if (weight <= breakpoint && breakpoint !== undefined) {
return weight * rate;
}
}
const lastItem = arr[arr.length - 1];
return weight * lastItem[1];
Logger.log(weight); Logger.log(arr[arr.length-1])
}
function calcPriceAirfreight(airline, weight) {
const ss = SpreadsheetApp.getActive();
const airfreightSheet = ss.getSheetByName("airfreight");
const rangeAirlines =
airfreightSheet.getRange(3,1,airfreightSheet.getLastRow()-2,7).getValues();
const data = convertRange (rangeAirlines);
const breakpointsObject = addBreakpoints(data);
const carrierObj = findCarrierObject(breakpointsObject, airline);
const rates = getRates(carrierObj);
return calcPriceAir(rates, weight);
}
const price = calcPriceAirfreight("OZ(express)", 540);
Logger.log(price);
与在普通 IDE 中执行的操作相比,在 Apps 脚本编辑器中使用 arguments 调用 function 只是略有不同。 简单console.log(function(arg1, arg2))
不起作用。 现在很明显,但我有一段时间没有想到,浪费时间寻找不存在的错误。
归根结底,只需要在我的电子表格中调用 function 并传入两个 arguments(在我的情况下是两个单元格引用)。 虽然可能只是我经验不足。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.