Javascript数组速记
我只是想知道是否有一种写这段代码的速记方法:Javascript数组速记,javascript,arrays,loops,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循环解决方案,因为一些数组元素被跳过并显示。 谢谢 编辑: 我有
allJobs[0].style.display = 'none';
allJobs[1].style.display = 'none';
allJobs[3].style.display = 'none';
我尝试了这种方法,但它只隐藏了最后一个值,而不是之前的值:
allJobs[0, 1, 3].style.display = 'none';
我不认为我真的可以使用经典的for循环解决方案,因为一些数组元素被跳过并显示。
谢谢
编辑:
我有3个以上的显示编号,我只是想让问题变得简单,我不是那么懒,写3行
[0, 1, 3].forEach(function(d) {
allJobs[d].style.display = 'none';
});
虽然不可否认,只有三个要素,但这并不短
尽管无可否认,它只有三个元素,但并不短多少…虽然其他示例将支持较新的浏览器,但它应该可以全面工作:
var indexes = [0, 1, 3];
for(var i = 0; i < indexes.length; i++) {
allJobs[indexes[i]].style.display = 'none';
}
var索引=[0,1,3];
对于(var i=0;i
虽然其他示例将支持较新的浏览器,但这应该适用于所有浏览器:
var indexes = [0, 1, 3];
for(var i = 0; i < indexes.length; i++) {
allJobs[indexes[i]].style.display = 'none';
}
var索引=[0,1,3];
对于(var i=0;i
以下是我的做法:
function setHidden() {
for (var i = 0; i < arguments.length; i++) allJobs[arguments[i]].style.display = 'none';
}
setHidden(0, 1, 3);
函数setHidden(){
对于(var i=0;i
这种特殊的方法避免了对每个元素(如
Array.forEach
)进行代价高昂的函数调用。以下是我的做法:
function setHidden() {
for (var i = 0; i < arguments.length; i++) allJobs[arguments[i]].style.display = 'none';
}
setHidden(0, 1, 3);
函数setHidden(){
对于(var i=0;i
此特定方法避免了对每个元素(如
Array.forEach
)进行代价高昂的函数调用。以下是另一种方法:
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;
}
以下是另一种方法:
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;
}
第一个例子有什么问题?这至少很清楚。我知道,但我有一大堆显示非,所以我想用一种更短的方式来写它们!供以后参考!您总是希望隐藏项0、1和3,还是有其他规则在起作用?@AdamAlexanderWilson:如果您使用jQuery,您可以只编写
$('selector').hide()
。第一个示例有什么问题?这至少很清楚。我知道,但我有一大堆显示非,所以我想用一种更短的方式来写它们!供以后参考!您总是希望隐藏项目0、1和3,还是有其他规则在起作用?@AdamAlexanderWilson:如果您使用jQuery,您可以只编写$('selector')。hide()
…或者使用循环来隐藏相同的内容,是的。IE8和以下版本不支持forEach
,因此如果您确实支持这些浏览器,你需要一个塑料填充。太好了!我还有更多我只是想把问题弄清楚,我确实试过了,但我一定是对代码有点不了解…或者对循环有点不了解,是的。IE8及以下版本不支持forEach
,所以如果你真的支持那些浏览器,你就需要一个polyfill。太好了!我还有更多的问题,我只是想把问题弄清楚,我确实试过了,但是我一定是有点不喜欢用在中的在数组上迭代?嗯,我从来不知道。谢谢。@Blender-我之所以说这不是一个好主意,是因为如果你传入的不是数组或带有附加属性的数组,那么它也会在循环中包含这些键……或者如果页面中的某些内容修改了数组。原型
。。。在
中使用来迭代数组是个坏主意。@josh3736-删除了在中有问题的用法。只是让它变得不那么漂亮。在
中用迭代数组?嗯,我从来不知道。谢谢。@Blender-我之所以说这不是一个好主意,是因为如果你传入的不是数组或带有附加属性的数组,那么它也会在循环中包含这些键……或者如果页面中的某些内容修改了数组。原型
。。。在
中使用来迭代数组是个坏主意。@josh3736-删除了在中有问题的用法。只是让它不那么漂亮。