创建一个javascript for循环而不是我所有的if

时间:2016-02-12 11:28:53

标签: javascript

如何为我的if案例制作一个简单的for循环?
这需要很大的空间..而且我不擅长循环...
请帮我.. 我会试试......

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);

Jan,feb已经满了,但其余的都没有。 mar会给我“undefined”而不是“0”,因为我想..

3 个答案:

答案 0 :(得分: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(由于懒惰只有三个月),两个测试你的代码(oldTest())和我的(test()):https://jsbin.com/vicinuwuyi/1/edit?js,console

答案 1 :(得分:-1)

假设的意图是用零替换所有空月属性。那是有问题的代码所做的 - 它取代了上次匹配的整个结果if ...

用类似

的方式声明月份
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";
   }
}

如果您确定monthnull的声明result.RosaAvformning属性,那么您可以使用

进行循环播放
for (key in someObject) {
    if ( someObject.hasOwnProperty(key) ) { // ignore class fields
       // access someObject[key])
    }
}

但如果undefined属性不属于null属性,则会失败,并且可以匹配非月属性...

答案 2 :(得分:-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}";
}

或者其他类似的东西,我相信你正在使用用户输入,所以你需要将它添加到混合中,我需要看到它来集成它:)