将if语句引入特定for循环的正确方法是什么?

时间:2016-11-28 10:54:54

标签: javascript

编辑:只是为了澄清,因为zer00ne发现这是最初缩小的代码,我为了修改它而“美化”。抱歉不要早点说清楚。

原创for循环,有效:

m = 0;
for (k = b.header.length; m < k; m++) d.appendChild(p(e, "col", {
  attr: {
        min: m + 1,
        max: m + 1,
        width: N(b, m),
        customWidth: 1
  }
}));

我想做什么,但不起作用:

m = 0;
for (k = b.header.length; m < k; m++) d.appendChild(p(e, "col", {
  if (m==6) {
    attr: {
        min: m + 1,
        max: m + 1,
        width: 100,
        style: 2,
        customWidth: 1
    }
  } else {
    attr: {
        min: m + 1,
        max: m + 1,
        width: N(b, m),
        customWidth: 1
    }
  }
}));

我理解if语句在错误的地方w.r.t.函数d.appendChild,但我不确定如何将for循环与函数分开,以便将if语句放在正确的位置。最后,这种for循环/函数混合的风格是什么?

帮助?

3 个答案:

答案 0 :(得分:4)

它不是关于for循环,而是关于在对象文字中使用if的可能性。简而言之,没有。

您可能会做的是扩展基于条件的特定参数,如下所示:

var m = 0;
var attr;
for (var k = b.header.length; m < k; m++) {
  attr = {
    min: m + 1,
    max: m + 1,
    customWidth: 1
  };
  if (m === 6) {
    attr.style = 2;
    attr.width = 100;
  }
  else {
    attr.width = N(b, m);
  }
  d.appendChild(p(e, 'col', { attr: attr }));
}

这种方法是干的:两种情况共同的属性被指定一次(因此更容易修改它们)。

你是否只使用过一个不同的参数,还有另一种方法可以做到这一点 - 使用三元:

attr = {
  min: m + 1,
  max: m + 1,
  width: m === 6 ? 100 : N(b, m),
  customWidth: 1
};

不过,还有另外一件事要考虑:6是什么?任何读者都不清楚 - 包括你几个月(甚至几周,取决于代码库的大小)。

答案 1 :(得分:1)

打开for循环,然后将if放入内部,并将appendChild放在if语句中:

for (<stuff>) {
    if (<expression>) {
        d.appendChild(<stuff>);
    }
}

答案 2 :(得分:0)

您已将if条件作为参数放入d.appendChild。那不行:

m = 0;
for (k = b.header.length; m < k; m++) {
   if (m==6) {
      d.appendChild(p(e, "col", {
        attr: {
           min: m + 1,
           max: m + 1,
           width: 100,
           style: 2,
           customWidth: 1
        }
      }));
   } else {
      d.appendChild(p(e, "col", {
         attr: {
            min: m + 1,
            max: m + 1,
            width: N(b, m),
            customWidth: 1
         }
      }));
   }
}