字符串比较不符合预期
String comparison not as expected
我编写了以下代码以在数组中查找字符串标记。
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] == "#l" || data[0] == "#L") {
if(data[0].search("#g") != -1 || data[0].search("#G") != -1){
}else{
isLayer = true;
}
}else if(data[0] == "#g" || data[0] == "#G"){
if(data[0].search("#l") != 0 || data[0].search("#L") != 0){
}else{
is group = true;
}
}
你看,你没有做的是检查两者是否都存在。我的代码所做的是检查
- 项目是#g或#l
- 该项目不相反。
这样可以确保只有一个选项被选中。
美好的一天,祝你好运。
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;//remember isLayer is still true - you haven't set it to false;
处理第三行将触发您的其他部分...并进入第一个条件,其中 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
};
}
}
我编写了以下代码以在数组中查找字符串标记。
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] == "#l" || data[0] == "#L") {
if(data[0].search("#g") != -1 || data[0].search("#G") != -1){
}else{
isLayer = true;
}
}else if(data[0] == "#g" || data[0] == "#G"){
if(data[0].search("#l") != 0 || data[0].search("#L") != 0){
}else{
is group = true;
}
}
你看,你没有做的是检查两者是否都存在。我的代码所做的是检查
- 项目是#g或#l
- 该项目不相反。
这样可以确保只有一个选项被选中。
美好的一天,祝你好运。
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;//remember isLayer is still true - you haven't set it to false;
处理第三行将触发您的其他部分...并进入第一个条件,其中 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
};
}
}