Алгоритм для слияния элементов массива с datetime
Туплю, не могу придумать алгоритм, который бы из такой структуры данных
Код:
19.07.2015 6:00 Код:
19.07.2015 6:00 - 8:00 |
Сначала в long преобразуйте, там виднее будет как квантовать по часам.
|
А по какому принципу определяются именно эти интервалы?
6:00 - 8:00 14:00 - 16:00 20:00 - 21:00 |
Цитата:
|
Цитата:
|
:write:
for (var a = [6, 7, 8, 14, 15, 16, 20, 21], c = [], temp, i = 0; i < a.length; i++) if (!temp && (temp = a[i]), void 0 !== a[i + 1] && 1 < a[i + 1] - a[i] || i == a.length - 1) c.push(temp + " - " + a[i]), temp = !1; alert(c); |
Мои 5коп... :D
var a = [6, 7, 8, 14, 15, 16, 20, 21]; var b=[]; for (var i = 0; i < a.length; i+=3) { b[b.length]=a[i]+' - '+((a[i+2])? a[i+2]: a[i+1]); }; alert(b); |
ksa,
если добавить 9 уже будет неправильно |
Цитата:
Вопрос был "как это перевести в то", мой пример делает это. :) Может это твой пример будет не правильным. :D |
рони, для "9-ти"... :D
var a = [6, 7, 8, 14, 15, 16, 20, 21]; var b=[]; for (var i = 0; i < a.length-1; i+=3) { b[b.length]=a[i]+' - '+((a[i+2])? a[i+2]: a[i+1]); }; alert(b); |
ksa,
где 6-9 ? var a = [6, 7, 8, 9, 14, 15, 16, 20, 21]; var b=[]; for (var i = 0; i < a.length-1; i+=3) { b[b.length]=a[i]+' - '+((a[i+2])? a[i+2]: a[i+1]); }; alert(b); |
Цитата:
|
ksa,
алгоритм должен выдать при 6, 7, 8, 9, 14, 15, 16, 20, 21 => 6-9,14-16,20-21 -- конечно пока ТС это неуточнил |
Цитата:
|
Цитата:
|
рони, я думал, что ты про 9шт. элементов (их у ТСа 8шт. в примере) ранее писал... :D А ты оказывается про 9-ку как значение в том массиве...
|
ksa,
:yes: |
Цитата:
|
вставлю еще я 5 копеек :write:
алгоритм должен пропускать 2 - 1 - 0 ?? var arr = [6, 7, 8, 9, 14, 15, 16, 20, 21]; var mas = []; for(var i = 0, j = 3; i < arr.length; i++, j-=1) { (j > 0) ? mas.push(arr[i] + '-' + arr[i+j]) : j = 3; i+=j; } alert(mas) |
silent,
:-? var arr = [6, 20, 21]; var mas = []; for(var i = 0, j = 3; i < arr.length; i++, j-=1) { (j > 0) ? mas.push(arr[i] + '-' + arr[i+j]) : j = 3; i+=j; } alert(mas) :write: var a = [6,20,21]; function fn(b) { for (var d = [], c, a = 0; a < b.length; a++) if (!c && (c = b[a]), void 0 !== b[a + 1] && 1 < b[a + 1] - b[a] || a == b.length - 1) d.push(c + (c == b[a] ? "" : " - " + b[a])), c = !1; return d }; alert(fn(a)) |
у тебя здесь 6 - 8,14 - 16,20 - 8,14 - 16,20 - 21
1 - 1 - 3 -1 -1 или я что то не понимаю ? for (var a = [6, 7, 8, 14, 15, 16, 20, 21,6, 7, 8, 14, 15, 16, 20, 21], c = [], temp, i = 0; i < a.length; i++) if (!temp && (temp = a[i]), void 0 !== a[i + 1] && 1 < a[i + 1] - a[i] || i == a.length - 1) c.push(temp + " - " + a[i]), temp = !1; alert(c) ладно пойду делом займусь )) |
silent,
два дня для тестирования это уже перебор! алгоритм для суток только |
извини я не так понял поставленную задачу :)
|
Алгоритм - разбить на диапазоны по условию разница времени между датами больше 1 часа и вывести первое и последнее значение каждого диапазона в формате дата - первое значение времени - последнее значение времени. Почему я и предложил перевести все в long сперва. Ибо не факт что эти красивые циферки не испортятся на практике.
|
Цитата:
|
Покажите ему юникс время, кто-нибудь.
|
рони,
у тебя слишком замучено для такой задачи. как-то так var a = [6, 7, 8, 14, 15, 16, 20, 21,6, 7, 8, 14, 15, 16, 20, 21], n = a.length, b = [], m = 0; for (var i = 0, t = a[i]; i < n; i++) { if (a[i]+1 == a[i+1]) continue; else { b[m++] = ((t == a[i]) ? '' : (t+' - ')) + a[i]; t = a[i+1]; } } alert(b); |
Demath,
ок совершенству нет предела |
Demath,
а чем b.push не устроил? |
рони,
привык без него |
Часовой пояс GMT +3, время: 09:53. |