2016-02-12 106 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}"; 
} 

或者類似的規定,我相信您使用的是用戶輸入,所以你需要添加到混合,我需要看它來整合它:)