javascript - 字符串比较不符合预期

标签 javascript jsx

我编写了以下代码,在数组中查找字符串标记。

var parseCSVLines = function(lines) {
    var valueObj = {};
    var delim  = ',';
    var isLayer = false;
    var isGroup = false;

    for(var i = 0; i < lines.length; i++){

      //skips CR/CF lines
      if(!lines[i]) continue;

      //only data lines reach this loop
      var data = lines[i].split(delim);

      /*********looks for tag*************/
      if(data[0] == '#L' || data[0] == '#l'){
        //on occasions, data[0] is '#L' or '#G' still execution reaches here
        isLayer = true;
      }else if(data[0] == '#G' || data[0] == '#g'){
        isGroup = true;
      }else{
        if(isLayer){
          valueObj[data[0]] = { 
            layerInfo: data[1] == 'on' ? true : false
          };
        }
        else if(isGroup){
          valueObj[data[0]] = { 
            GroupInfo: data[1] == 'on' ? true : false
          };
        }
      }

    }

    return valueObj;
};

我循环遍历各行并标记下一行以获取数据。奇怪的是,当 data[0]'#L''#G' 时,第一个 if 语句被执行。我做错了什么?

最佳答案

if 语句很好,即使你有 data[0]='#G#L'...它也永远不会进入 data[0]=='# L'||data[0]=='#l'

在我看来,你陷入了逻辑困境-

 if (data[0] == '#L' || data[0] == '#l') {
     isLayer = true;
     //isGroup=false; you should toggle isGroup
 } else if (data[0] == '#G' || data[0] == '#g') {
     isGroup = true;
     //isLayer=false; you should toggle isLayer
 } else { //do you want else here??? This would pick the value of isLayer  or isGroup according to previous line processed but not the value according to current line being processed.
     if (isLayer) {
         valueObj[data[0]] = {
             layerInfo: data[1] == 'on' ? true : false
         };
     } else if (isGroup) {
         valueObj[data[0]] = {
             GroupInfo: data[1] == 'on' ? true : false
         };
     }
 }

示例:

line1: '#L,hi'
line2:'#G,hi'
line3:'hi'

处理第一行将设置isLayer=true;

处理第二行将设置isGroup=true;//记住isLayer仍然是true - 你还没有将它设置为false;

处理第三行将触发您的 else 部分...并进入第一个条件,其中 if(isLayer) 将为 true

要使其发挥作用:

//update isLayer and isGroup for every iteration to keep the logic inline
isLayer=(data[0] == '#L' || data[0] == '#l');
isGroup=(data[0] == '#G' || data[0] == '#g');
if(!isLayer && !isGroup) {
     if (isLayer) {
         valueObj[data[0]] = {
             layerInfo: data[1] == 'on' ? true : false
         };
     } else if (isGroup) {
         valueObj[data[0]] = {
             GroupInfo: data[1] == 'on' ? true : false
         };
     }
 }

关于javascript - 字符串比较不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183683/

相关文章:

javascript - 带有 jsx/react 替代品的这种空警报

javascript - 如何在 React Native 中将两个按钮放在同一行中?

photoshop - "Console.log"与 Photoshop 脚本 - ExtendScript 工具包

javascript - 当 "open"属性设置为 "true"时,@material-ui/core 的 DRAWER 组件不会出现

javascript - CMS使用jquery 1.7,主题使用jQuery 1.6 ==冲突

javascript - 在 JSX 中使用属性的 bool 值

javascript - Jquery datepicker 将 dateFormat 更改为 unix 时间戳

javascript - 未捕获的类型错误 : data. 有些不是函数

javascript - 在 React : Uncaught TypeError: . 中调用函数 .. 不是函数(...)

javascript - Firebase 在创建帐户后返回用户对象