2016-02-12 59 views
0

如何为我的if case做一个简单的循环?
这正采取太多的空间..我不擅长的for循环...
请帮助我.. I'll尝试...创建一个JavaScript for循环而不是我所有的if's

for(i = 0; i < result.length; i++){ 
if(result[i] === null){ 

CODE

if(null === result.RosaAvformning.jan){ 
      result = { 
       "RosaAvformning" : {"jan":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.feb){ 
      result = { 
       "RosaAvformning" : {"feb":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.mar){ 
      result = { 
       "RosaAvformning" : {"mar":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.apr){ 
      result = { 
       "RosaAvformning" : {"apr":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.maj){ 
      result = { 
       "RosaAvformning" : {"maj":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.jun){ 
      result = { 
       "RosaAvformning" : {"jun":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.jul){ 
      result = { 
       "RosaAvformning" : {"jul":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.aug){ 
      result = { 
       "RosaAvformning" : {"aug":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.sep){ 
      result = { 
       "RosaAvformning" : {"sep":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.okt){ 
      result = { 
       "RosaAvformning" : {"okt":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.nov){ 
      result = { 
       "RosaAvformning" : {"nov":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.dec){ 
      result = { 
       "RosaAvformning" : {"dec":"0"} 
      } 
     } 

编辑

var months = ["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"]; 

    months.forEach(function (m){ 
     if (result.RosaAvformning[m] === null) { 
      result.RosaAvformning = {}; 
      result.RosaAvformning[m] = 0; 
     } 
    }); 

    months.forEach(function (m){ 
     if (result.BlåAvformning[m] === null) { 
      result.BlåAvformning = {}; 
      result.BlåAvformning[m] = 0; 
     } 
    }); 

    console.log(result.RosaAvformning.mar); 

1月,feb已满,但其余部分不满。 mar会给我“undefined”不是“0”,因为我想..

+0

你的结果数组可以包含超过12个值吗? –

+1

如果jan和feb都是'null',result'将被覆盖。情况会是这样吗? – Andy

+3

绝不粗鲁,但提供的代码没有意义。你确定这篇文章中的例子与你的真实代码相同吗?另请注意,检索一个不存在的属性的值默认不会返回null,而是返回undefined。 – Teemu

回答

1

我不知道,如果提供的代码很有意义,它会一遍又一遍地覆盖结果。但是,下面是如何将其转换为循环:

使用您要测试的所有键创建一个数组。然后遍历这些键和每个看它是否是null,如果是,分配了零:

function oldTest(result) { 
    if(null === result.RosaAvformning.jan){ 
      result = { 
       "RosaAvformning" : {"jan":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.feb){ 
      result = { 
       "RosaAvformning" : {"feb":"0"} 
      }; 
     } 
     if(null === result.RosaAvformning.mar){ 
      result = { 
       "RosaAvformning" : {"mar":"0"} 
      }; 
     } 
    return result; 
} 


function test (result) { 
    var months = ["jan", "feb", "mar"]; 

    months.forEach(function (m){ 
     if (null === result.RosaAvformning[m]) { 
     result.RosaAvformning = {}; 
     result.RosaAvformning[m] = 0; 
     return result; 
     } 
    }); 
    return result; 
} 

// init test data 
var result = {}; 
result.RosaAvformning = { 
    "jan" : null, 
    "feb" : null, 
    "mar" : null 
}; 

// test no months set 
console.log ("Old Test 1", test(result)); 
console.log ("new Test 1", oldTest(result)); 

// set one month 
result.RosaAvformning = { 
    "jan" : 1, 
    "feb" : 1, 
    "mar" : null 
}; 

// test one months set 
console.log ("Old Test 2", test(result)); 
console.log ("new Test 2", oldTest(result)); 

我准备了一个小JSBin(含因lazyness只有三个月)和两个同时测试你的代码(oldTest())和我的(test()):https://jsbin.com/vicinuwuyi/1/edit?js,console

+0

正如上面评论中提到的那样,结果是“未定义的”而不是“null”,正如我所说的那样。我可以知道这样做吗:'if(result.RosaAvformning [m] ===“undefined”){'?? –

+1

'if(result.RosaAvformning [m] === undefined){'。然而,除非你有特定的理由,否则在空和未定义之间辨别,'if(result.RosaAvformning [m] == null){'也会做。 –

+0

如果我使用:'if(result.RosaAvformning [m] === null){'
'console.log(result.RosaAvformning.mar);'将在colsole中给出“未定义”...我喜欢它为“0” –

-1

我是假设的目的是用零替换所有空月份属性。那什么有问题的代码执行 - 它取代了过去,如果匹配而导致整个...


声明个月,像

var months = ["jan", "feb", ... 

和遍历他们

var i, len, month; 
for (i = 0, len = months.length; i < len; i++) { 
    month = months[i]; 
    if (null === result.RosaAvformning[month]){ // this null === will NOT match undefined properties!!! 
     result.RosaAvformning[month] = "0"; 
    } 
} 

如果您确定monthresult.RosaAvformning的宣称的null财产母鸡可以循环到随

for (key in someObject) { 
    if (someObject.hasOwnProperty(key)) { // ignore class fields 
     // access someObject[key]) 
    } 
} 

,但它会失败,你有undefined性能不null性能 - 而且可以匹配非月性质,以及...

-1

通过你的代码的外观,你只是想测试他们做了哪个月。

凝聚了if语句成一个for循环,将是这样的

var arrayList = [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]; 
var result; 

for(var i = 0; i < arrayList.length; i++) { 
    result = "RosaAvformning : {i : 0}"; 
} 

或者类似的规定,我相信您使用的是用户输入,所以你需要添加到混合,我需要看它来整合它:)