2015-10-09 2 views
3

Я собираю массив из моего back-end [09:00, 09:30, 10:00, 10:30]..., и я хотел бы фильтровать все таймы до и включая 12:00.JavaScript удаляет элементы из массива до x

Как бы я пошел?

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

+0

ли эти времена заказчик? – ojovirtual

+0

Да, они заказываются – jbehrens94

+0

Какой формат имеет ваше время? Обозначение, которое вы указали, недопустимо javascript.Если он находится в строках, тогда формат будет "[" 09:00 "," 09:30 "," 10:00 "," 10:30 "]'. В этом случае первый ответ @ VisioN будет работать и имеет мой голос. – wintvelt

ответ

5

Это будет единственный ответ, так далеко, что будет отфильтровывать раз, если 12:00 нет в массиве:

var array = ['09:00', '09:30', '10:00', '10:30', '12:00', '12:30', '13:00']; 

var result = array.filter(function(e) { 
    var date = new Date('1.1.2000 ' + e), // create Date object 
     hours = date.getHours();   // get hours from time 

    return hours > 12 || (hours === 12 && date.getMinutes() > 0); 
}); 

console.log(result); // ["12:30", "13:00"] 

В качестве альтернативы , не полагаясь на объект Date, мы можем использовать простые манипуляции с строками:

var result = array.filter(function(e) { 
    var date = e.split(':'), // split time by ':' 
     hours = +date[0];  // get hours as a number 

    return hours > 12 || (hours === 12 && +date[1] > 0); 
}); 

console.log(result); // ["12:30", "13:00"] 

Еще более простое решение заключается в преобразовании времени в число и отфильтровать все, что меньше или равна 1200:

var result = array.filter(function(e) { 
    return +e.replace(':', '') > 1200; 
}); 

console.log(result); // ["12:30", "13:00"] 
+1

Это решение отлично, не только потому, что оно делает то, что оно означает, но оно по-прежнему работает, если массив не упорядочен. – ojovirtual

+0

Очень обширное решение, и я хотел бы поблагодарить вас за это: D – jbehrens94

2

Если массив упорядочен, а значение '12:00' всегда присутствует, то вы можете использовать индекс и срез() как

var array = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']; 
 
var newarray = array.slice(array.indexOf('10:00') + 1); 
 
snippet.log(JSON.stringify(newarray))
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


Если вы не уверены, представлены значения стоимости, то вам необходимо итерации по массиву и файлу

var array = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']; 
 
var newarray = array.filter(function(item) { 
 
    return item > '10:00' 
 
}); 
 
snippet.log(JSON.stringify(newarray))
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Значение «12: 00» не всегда присутствует всегда, оно соответствует «12: 00», но оно также должно фильтровать все значения до того, если (например) самое высокое значение: «11: 30» – jbehrens94

+0

Поэтому он должен проверить до максимума '12: 00', если это делает его более понятным. – jbehrens94

+0

@ jbehrens94 ли он в 24-часовом формате –

0

если 12.00 присутствует:

my_array = backend_array.slice(0, backend_array.index("12.00")+1) 
1

Этот метод основан на строках времени, чтобы всегда быть отформатирован, как это : HH:mm.

Он будет проходить через все элементы массива и удалять элементы, которые меньше или равны '12:00'.

var times = ['09:00', '09:30', '10:00', '10:30', '12:30']; 
 

 
for (var i = 0; i < times.length; i++) { 
 
    if (times[i] <= '12:00') { 
 
     times.splice(i--, 1); 
 
    } 
 
} 
 

 
document.body.innerHTML = JSON.stringify(times); 
 
// Running this code snippet will output ["12:30"]

0

В каком формате ваши данные? Если они являются строками и упорядочен массив, вы можете просто найти индекс элемента с текстом «12:00» и массивом срезов из этой позиции.

arr.splice(arr.indexOf('12:00') + 1); 
0

Попробуйте использовать функцию filter:

var times = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30'] 
 
, latestTime = breakUpTime('12:00') 
 
, result = '' 
 
; 
 
var newTimes = times.filter(function(time){ 
 
    var thisTime = breakUpTime(time); 
 
    return thisTime['hour'] < latestTime['hour'] || (thisTime['hour'] == latestTime['hour'] && thisTime['minute'] <= latestTime['minute']); 
 
}); 
 
function breakUpTime(time) { 
 
    var parts = time.split(':'); 
 
    return {'hour' : parseInt(parts[0]), 'minute' : parseInt(parts[1])}; 
 
} 
 
for(var time = 0; time < newTimes.length; time ++) { 
 
    result += newTimes[time] + '<br/>'; 
 
} 
 
document.write(result);

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