我正在創建一個電子表格,用于為酒吧開發新的雞尾酒和雞尾酒配料,以快速生成大量資訊。
我已經根據 Anthony Grant 的此處使用 switch case制作了一個腳本,以幫助計算任何給定溶液的 pH 值,該溶液在回傳該物質濃度的成分列中提取純英文文本。例如,單詞“Citric”回傳數值 192.124(因為這是檸檬酸的分子量)等等,具體取決于酸。它作業得很好,非常適合。從那里我可以計算pH值。像這樣:
/**
* This function determines the concentration of hydronium ions to be used to calculate pH.
* To finish the calculation, combine the concentrations of all acids then add into -log10(concentration)
* @constructor
* @param {input} amount of acid in grams
* @param {acid} type of acid in plain English
* @param {volume} total volume of solution
* @return The amount of acid divided by the molar mass of acid then divided by the total volume
* @customfunction
*/
function pHCALC( input, acid, volume) {
var rate = 0 ;
switch (acid) {
case 'Citric':
rate = 192.124;
break;
case 'Malic':
rate = 137.087;
break;
case 'Tartaric':
rate = 150.087;
break;
case 'Ascorbic':
rate = 176.120;
break;
case 'Lactic':
rate = 90.08;
break;
case 'Phosphoric':
rate = 97.994;
break;
case 'Acetic':
rate = 60.052;
default:
rate = 0;
}
return ((input / rate)/ volume);
}
我希望對不同糖漿中的蔗糖水平做同樣的事情,所以我只是復制了代碼并更改了我需要的內容,但由于某種原因,它根本不起作用:
/**
* This function determines sucrose content of common syrups
* @constructor
* @param {input} type of sugar/syrup in English
* @return The amount of sucrose in 1g of noted substance
* @customfunction
*/
function sugarcalc( input,sugar) {
var rate = 0;
switch (sugar) {
case 'Caster Sugar': rate = 1.0;
break;
case 'Honey': rate = 0.82;
break;
case '2:1 Honey Syrup': rate = 0.55;
break;
case '1:1 Honey Syrup': rate = 0.41;
break;
case 'Invert Syrup': rate = 0.70;
break;
case '2:1 Sugar Syrup': rate = 0.67;
break;
case '3:2 Sugar Syrup': rate = 0.60;
break;
case '1:1 Sugar Syrup': rate = 0.50;
break;
case 'Agave Syrup': rate = 0.68;
break;
case 'Maple Syrup': rate = 0.68;
break;
case 'Rice Malt Syrup': rate = 0.55;
break;
case 'Gomme': rate = 0.68;
default:rate = 0;
}
return (input * sugar);
}
我想參考簡單的英語,所以如果提到每種情況下提到的單詞,那么函式將根據糖漿輸出正確的值。我開始在“var rate = 0”旁邊有一個黃色燈泡,但在 pH 函式上,我沒有。
提前致謝
編輯:對最后一行的問題進行排序,加上 rate2 - 謝謝!
現在,如果我想擴展案例的條款,以便它可以捕獲更多的短語,但仍然回傳相同的結果。例如:
case 'Caster Sugar','caster sugar','sugar','granulated sugar': rate2 = 1.0;
break;
這似乎打破了它。我需要不同的分隔符嗎?
uj5u.com熱心網友回復:
我認為你需要改變sugar這一行:
return (input * sugar);
至rate:
return (input * rate);
更新
至于“擴大條款”,恐怕switch/case不是最好的選擇。如果你想忽略一個案例('Caster Sugar' == 'caster sugar')。在進行比較之前,您可以將所有內容轉換為小寫:
...
switch (sugar.toLowerCase()) {
// it will catch 'caster sugar' and 'Caster Sugar' and 'CASTER SUGAR', etc
case 'caster sugar': rate = 1.0;
break;
...
但是,如果您想檢查可能值的串列(“細砂糖”、“糖”、“砂糖”),則需要更復雜的代碼。我想為了您的情況更明智,只需在“switch/case”陳述句中添加幾行即可。
如果您真的想嘗試更復雜的解決方案,請告訴我。
更新 2
我建議if在專用函式中使用陳述句而不是switch/case. 它的作業方式大致相同,但可以添加更復雜的條件。代碼如下所示:
function sugarcalc(input, sugar) {
var sugar = sugar.toLowerCase() // convert to lower case
.trim() // remove spaces at the start and at end
.replace(/ /g, ' '); // replaces double spaces with single spaces
return input * get_rate(sugar);
function get_rate(sugar) {
// multi conditions
var texts = ['caster sugar', 'sugar', 'granulated sugar'];
if (texts.includes(sugar)) return 1.00;
var texts = ['gomme', 'agave syrup', 'maple syrup'];
if (texts.includes(sugar)) return 0.68;
// single conditions
if (sugar == 'honey') return 0.82;
if (sugar == '2:1 honey syrup') return 0.55;
if (sugar == '1:1 honey syrup') return 0.41;
if (sugar == 'invert syrup') return 0.70;
if (sugar == '2:1 sugar syrup') return 0.67;
if (sugar == '3:2 sugar syrup') return 0.60;
if (sugar == '1:1 sugar syrup') return 0.50;
if (sugar == 'rice malt syrup') return 0.55;
return 0; // default rate
}
}
// tests
console.log(sugarcalc(2, 'Sugar')); // --> 2
console.log(sugarcalc(2, ' Sugar')); // --> 2
console.log(sugarcalc(1, '2:1 Honey Syrup')); // --> 0.55
console.log(sugarcalc(1, '2:1 HONEY Syrup')); // --> 0.55
console.log(sugarcalc(3, 'Granulated Sugar')); // --> 3
console.log(sugarcalc(3, 'Granulated sugar ')); // --> 3
console.log(sugarcalc(3, 'Gomme')); // --> 2.04
uj5u.com熱心網友回復:
將變數更改為第二個函式上的唯一名稱。如:
var rate2 = 0;
rate已經在第一個函式中定義了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418067.html
標籤:
