Map()函数与内部函数或嵌套的三元运算符的最佳实践谷歌脚本



我有两种使用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语句。如果与正确的代码意图/样式一起使用,它不会损害可读性,而且更短。

const mapFunc = y =>
y == 'Networking - 1'
? 1
: y == 'Cooperating - 2'
? 2
: y == 'Collaborating - 3'
? 3
: y == 'Partnering - 4'
? 4
: y;

性能也存在可变性。尽管这并没有在较新的v8发动机中进行测试,但在较旧的rhino发动机中,三元运算符是最快的。

给定同一变量上的多个条件,也可以使用switch语句。


然而,在您的特定情况下,如果您只是试图获取字符串中的最后一个数字,您可以只获取最后一个字符或使用regex:

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;

另请参阅:

JavaScript中不带";否则";

当您有多个条件需要检查时,三元运算符无法有效使用。

建议使用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;                     
}                
}
));

最新更新