[英]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.