Apss 脚本“if”条件评估不正确

问题描述 投票:0回答:1

oldnames[i+3]='汤姆' newnames[i]='汤姆'

当两个参数具有相同的值(见上文)时,为什么我的代码会执行?

for (var i=0 ; i<pocet2 ; i++) {
      var oldnaz=(oldnames[i+3]).toString();
      var newnaz=(newnames[i]);
      oldnaz=oldnaz.toString();
      newnaz=newnaz.toString();
      //Logger.log("oldname = "+oldnaz);
      //Logger.log("newname = "+newnaz);
      
      if(newnames[i]=='' )
      {
        //Logger.log(ss.getSheetByName(oldnames[i+3]).getSheetName());
        //Logger.log(i);
        //Logger.log(i+3);
        ss.getSheetByName(oldnames[i+3]).setName((i+1).toString());
      }
**      else if(newnames[i] != oldnames[i+3])
      {
      //Logger.log(newnames[i]);
      //Logger.log(oldnames[i+3]);
      ss.getSheetByName(oldnames[i+3]).setName(newnames[i]);
      }**
      else
      {
        //Nothing
      }
  }

我尝试对代码进行一些更改,但结果在各方面都是如此:条件为 TRUE。 但是当第一个值是 Tom 并且第二个值是 Tom 时,则 else if(Tom != Tom) 应该为 FALSE。 非常感谢您的提示。

google-apps-script
1个回答
0
投票

如果

oldnames
newnames
来自使用
range.getValues()
的范围,则这两个变量都是二维数组而不是一维数组。 因此,
oldnames[i+3]='Tom' newnames[i]='Tom'
是假的,那就是

oldnames[i+3]=['Tom']; //array
newnames[i]=['Tom'];

/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/ 
const newname=['Tom'];
const oldname=['Tom'];
console.log(newname != oldname);//expected true
<!-- https://meta.stackoverflow.com/a/375985/ -->    <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

两个数组无法进行比较。获取里面的字符串并比较:

else if(newnames[i][0] != oldnames[i+3][0])
© www.soinside.com 2019 - 2024. All rights reserved.