Javascript数组速记

时间:2013-04-29 20:36:25

标签: javascript arrays loops

我只是想知道是否有写这段代码的简写方法:

allJobs[0].style.display = 'none';
allJobs[1].style.display = 'none';
allJobs[3].style.display = 'none';

我试过这种方式,但它只隐藏了最后一个值而不是之前的值:

allJobs[0, 1, 3].style.display = 'none';

我真的不能使用经典的for循环解决方案,我不认为因为某些数组元素被跳过并显示出来。 谢谢。

修改 我有超过3个显示nones我只是想让问题变得简单,我不是懒得写3行!

4 个答案:

答案 0 :(得分:6)

[0, 1, 3].forEach(function(d) {
    allJobs[d].style.display = 'none';
});

虽然可以肯定的是,只有三个元素,这不会短得多......

答案 1 :(得分:4)

虽然其他示例将支持更新的浏览器,但这应该是全面的:

var indexes = [0, 1, 3];

for(var i = 0; i < indexes.length; i++) {
    allJobs[indexes[i]].style.display = 'none';
}

答案 2 :(得分:1)

以下是我如何做到这一点:

function setHidden() {
    for (var i = 0; i < arguments.length; i++) allJobs[arguments[i]].style.display = 'none';
}

setHidden(0, 1, 3);

这种特殊方法避免了对每个元素进行昂贵的函数调用(如Array.forEach)。

答案 3 :(得分:1)

这是另一种方法:

function setStyle(element, cssAttrib, cssValue) {
  element.style[cssAttrib] = cssValue;
}

var indexes = [ 0, 1, 3 ];
for ( var i = indexes.length-1; i > -1; i-- ) // Loop Backwards For Constant Comparison
{
  setStyle(allJobs[i], "display", "none");
}

请注意,调用setStyle会导致类似于forEach方法的函数调用惩罚。如果性能是一个问题,您可以考虑内联您的样式更改。

var indexes = [ 0, 1, 3 ];
for ( var i = indexes.length-1; i > -1; i-- ) // Loop Backwards For Constant Comparison
{
  allJobs[i].style.display = none;
}