2013-04-29 3 views
0

Я просто хотел бы знать, существует ли сокращенный способ написания этого кода:Javascript Массив Shorthand

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

Я попробовал этот путь, но это только когда-либо скрывает последнее значение не те, перед ним:

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

Я не могу использовать классическое решение для цикла, я не думаю, потому что некоторые элементы массива пропускаются и отображаются. Спасибо.

Edit: У меня есть более чем на 3 дисплея ноны я просто хотел, чтобы этот вопрос просто, им не поленился написать 3 линии!

+0

Что случилось с первым примером? Это, по крайней мере, очень ясно. – asawyer

+0

Я знаю, но у меня есть много дисплеев, поэтому мне нужен более короткий способ написать их! Для дальнейшего использования! – Awilson089

+0

Всегда ли пункты 0,1 и 3, которые вы хотите скрыть, или есть какое-то другое правило в игре здесь? – Chuck

ответ

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

Хотя по общему признанию, имея только три элемента, это не намного короче ...

+0

... или то же самое с петлей, да. – Bergi

+0

IE8 и ниже не поддерживают 'forEach', поэтому, если вы поддерживаете эти браузеры, вам понадобится полипол. – Blender

+0

Отлично! и у меня больше, я просто хотел сделать вопрос ясным, я на самом деле пробовал это, но я должен был немного с кодом – Awilson089

4

В то время как другие примеры поддержки новых браузеров, это должно работать по всем направлениям:

var indexes = [0, 1, 3]; 

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

Итерация по массиву с 'in'? – Blender

+0

Да, я этого никогда не знал. Благодарю. – Blender

+0

@Blender. Причина, по которой я говорю, что это не очень хорошая идея, заключается в том, что если вы передадите нечто, отличное от массива или массива с добавленными свойствами, оно также будет содержать эти ключи в цикле. –

1

Вот как я это сделаю:

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

setHidden(0, 1, 3); 

Этот конкретный метод позволяет избежать дорогостоящего вызова функции f или каждый элемент (например, Array.forEach).

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; 
} 
Смежные вопросы