具有内部函数或嵌套三元运算符最佳实践的 Map() 函数 Google 脚本
Map() function with inner function or nested Ternary Operator best practices Google script
我有两种使用 Map() 编写相同函数的方法,根据我的阅读,我无法判断是否有最佳实践方法
与此相关的嵌套 ternary
操作被认为是不好的做法?
方法2
function Method2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var values = rng.getValues();
values = values.map(x => x.map(y => giveNumber(y)));
sht.getRange(1,1, values.length, values[0].length).setValues(values);
}
function giveNumber(str) {
if(str=="Networking - 1") {str=1}
else if(str=="Cooperating - 2") {str=2}
else if (str=="Collaborating - 3"){str=3}
else if(str=="Partnering - 4") {str=4}
else {str=str}
return str
}
方法3
function Method3() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var values = rng.getValues();
values = values.map(x => x.map(y => y==("Networking - 1") ? 1:
y==("Cooperating - 2") ? 2:
y==("Collaborating - 3") ? 3:
y==("Partnering - 4") ? 4:
y));
sht.getRange(1,1, values.length, values[0].length).setValues(values);
}
当您有多个条件要检查时,三元运算符无法有效使用。
建议使用if/else if
语句:
values = values.map(x => x.map(y =>
{
if (y== "Networking - 1"){
return 1;
}
else if(y=="Cooperating - 2"){
return 2;
}
else if(y=="Collaborating - 3"){
return 3;
}
else {
return 4;
}
}
));
我不同意接受的答案。三元运算符可以有效地用于多个 if/else
语句。如果与适当的代码一起使用 intents/style,它不会损害可读性并且更短。
const mapFunc = y =>
y == 'Networking - 1'
? 1
: y == 'Cooperating - 2'
? 2
: y == 'Collaborating - 3'
? 3
: y == 'Partnering - 4'
? 4
: y;
性能也确实存在差异。虽然这没有在较新的 v8 engine, In older rhino engine, ternary operators were the fastest.
中测试
给定同一个变量的多个条件,也很容易使用 switch
语句来代替。
然而,在您的特定情况下,如果您只是想获取字符串中的最后一个数字,您可以只获取最后一个字符或使用正则表达式:
y => Number(y[y.length-1]) || y
另一种方法是使用数组 indexOf
:
const strs = [
'Networking - 1',
'Cooperating - 2',
'Collaborating - 3',
'Partnering - 4',
];
const mapFunc = y => strs.indexOf(y) + 1 || y;
另见:
Ternary operators in JavaScript without an "else"
我有两种使用 Map() 编写相同函数的方法,根据我的阅读,我无法判断是否有最佳实践方法
与此相关的嵌套 ternary
操作被认为是不好的做法?
方法2
function Method2() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var values = rng.getValues();
values = values.map(x => x.map(y => giveNumber(y)));
sht.getRange(1,1, values.length, values[0].length).setValues(values);
}
function giveNumber(str) {
if(str=="Networking - 1") {str=1}
else if(str=="Cooperating - 2") {str=2}
else if (str=="Collaborating - 3"){str=3}
else if(str=="Partnering - 4") {str=4}
else {str=str}
return str
}
方法3
function Method3() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sht = ss.getSheetByName('Elements');
var rng = sht.getDataRange();
var values = rng.getValues();
values = values.map(x => x.map(y => y==("Networking - 1") ? 1:
y==("Cooperating - 2") ? 2:
y==("Collaborating - 3") ? 3:
y==("Partnering - 4") ? 4:
y));
sht.getRange(1,1, values.length, values[0].length).setValues(values);
}
当您有多个条件要检查时,三元运算符无法有效使用。
建议使用if/else if
语句:
values = values.map(x => x.map(y =>
{
if (y== "Networking - 1"){
return 1;
}
else if(y=="Cooperating - 2"){
return 2;
}
else if(y=="Collaborating - 3"){
return 3;
}
else {
return 4;
}
}
));
我不同意接受的答案。三元运算符可以有效地用于多个 if/else
语句。如果与适当的代码一起使用 intents/style,它不会损害可读性并且更短。
const mapFunc = y =>
y == 'Networking - 1'
? 1
: y == 'Cooperating - 2'
? 2
: y == 'Collaborating - 3'
? 3
: y == 'Partnering - 4'
? 4
: y;
性能也确实存在差异。虽然这没有在较新的 v8 engine, In older rhino engine, ternary operators were the fastest.
中测试给定同一个变量的多个条件,也很容易使用 switch
语句来代替。
然而,在您的特定情况下,如果您只是想获取字符串中的最后一个数字,您可以只获取最后一个字符或使用正则表达式:
y => Number(y[y.length-1]) || y
另一种方法是使用数组 indexOf
:
const strs = [
'Networking - 1',
'Cooperating - 2',
'Collaborating - 3',
'Partnering - 4',
];
const mapFunc = y => strs.indexOf(y) + 1 || y;
另见:
Ternary operators in JavaScript without an "else"