2015-10-06 3 views
0

У меня есть этот массив, который соответствует списку времени открытия и закрытия. Я смог манипулировать им, чтобы показать, что мне нужно. Массив соответствует открытию и закрытию в течение недели. Я могу разбить массив и перечислить время, но я повторяю себя часто, и мне интересно, есть ли лучший способ DRYer, более чистый.Использование цикла для сокращения этого кода (javascript)

var array = ["Today at 8:00 AM", "Today at 4:00 PM", 
"Tomorrow at 8:00 AM", "Tomorrow at 4:00 PM", "Thursday at 8:00 AM", 
"Thursday at 4:00 PM", "Friday at 8:00 AM", "Friday at 4:00 PM", 
"Saturday at 10:00 AM", "Saturday at 8:00 PM", "Sunday at 8:00 AM", 
"Sunday at 4:00 PM", "Monday at 8:00 AM", "Monday at 4:00 PM"] 

day1 = "Open " + array[0] + " Closed " + array[1] 
day2 = "Open " + array[2] + " Closed " + array[3] 
day3 = "Open " + array[4] + " Closed " + array[5] 
day4 = "Open " + array[6] + " Closed " + array[7] 
day5 = "Open " + array[8] + " Closed " + array[9] 
day6 = "Open " + array[10] + " Closed " + array[11] 
day7 = "Open " + array[12] + " Closed " + array[13] 

Я буду признавать, что циклы всегда были моими ахиллами, когда дело доходит до разработки. Будет ли петля быть решением для конденсации этого кода немного? Если да, то как и какой цикл будет использоваться?

Я хотел бы перечислить их по дням, подобно тому, что у меня есть в моем очень длинном повторяющемся коде.

+0

петля не поможет, если вам нужны результаты в 'day1', day2' 'и т. д. –

+1

Да, это будет:' day [n] ' –

+0

, но день [n] не день1, день2, день3 и т. Д. - сколько другого кода нужно будет переписать? –

ответ

1

Если вам нужны ваши дни, чтобы быть day1 ... вы могли бы использовать этот код, он просто добавить вот оно к объекту называется неделя, неделя будет содержать week.day1, week.day2, ...

(вы можете также выбрать окно вместо недели, а затем вы также найдете обратно день1;))

var array = ["Today at 8:00 AM", "Today at 4:00 PM", 
 
    "Tomorrow at 8:00 AM", "Tomorrow at 4:00 PM", "Thursday at 8:00 AM", 
 
    "Thursday at 4:00 PM", "Friday at 8:00 AM", "Friday at 4:00 PM", 
 
    "Saturday at 10:00 AM", "Saturday at 8:00 PM", "Sunday at 8:00 AM", 
 
    "Sunday at 4:00 PM", "Monday at 8:00 AM", "Monday at 4:00 PM" 
 
]; 
 

 
var week = window, // if you want it not as a global var, use {} here instead of window 
 
    dayProperty = "day"; 
 

 
for (var i = 0, j = 1, len = array.length; i < len; i += 2, j++) { 
 
    var target = dayProperty + j; 
 
    week[target] = "Open " + array[i] + ", Closes " + array[i + 1]; 
 
} 
 

 
console.log(week); 
 
console.log(day1); // when week is window, then day1 should be defined here (though it doesn't make your code cleaner)

3

Вы можете использовать day как массив и добавить строки в массив, используя push. И для доступа day1 использовать day[0], day2 как day[1] и так далее.

var array = [ 
    "Today at 8:00 AM", "Today at 4:00 PM", 
    "Tomorrow at 8:00 AM", "Tomorrow at 4:00 PM", 
    "Thursday at 8:00 AM", "Thursday at 4:00 PM", 
    "Friday at 8:00 AM", "Friday at 4:00 PM", 
    "Saturday at 10:00 AM", "Saturday at 8:00 PM", 
    "Sunday at 8:00 AM", "Sunday at 4:00 PM", 
    "Monday at 8:00 AM", "Monday at 4:00 PM" 
]; 

var day = []; // Declare empty array 

for (var i = 0, len = array.length; i < len; i += 2) { 
    // i is incremented by 2 for each iteration 

    // Push the formed string into the array 
    day.push("Open " + array[i] + " Closed " + array[i + 1]); 
} 

Хотя, вы можете использовать window вместо day в коде выше и добавить переменные в глобальной области видимости т.е. window в

window['day' + counter] = '...; 

эта практика не поощряется.

Я предлагаю/рекомендую передать переменную day в качестве параметра функции, в которой вам необходимо получить к ней доступ, и она находится за пределами текущей области.

+0

Хорошее решение, но что, если он не может использовать массив и нуждается в результатах как' day1', 'day2'? –

+1

@RudieVisser Это можно сделать с помощью 'window ['day' + counter] = formattedString', но это добавит элементы в Global Variable, тогда они могут использоваться как' day1', 'day2', ... – Tushar

+0

Спасибо, что поняли! –

Смежные вопросы