具有内部函数或嵌套三元运算符最佳实践的 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;

性能也确实存在差异。虽然这没有在较新的 engine, In older 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"