JavaScript从数组中删除元素直到x

时间:2015-10-09 08:09:40

标签: javascript arrays

我从我的后端[09:00, 09:30, 10:00, 10:30]...收集了一些时间,我希望在包括12:00之前过滤所有时间。

我该怎么办?

我考虑过在数组上使用$.each并相互检查字符串,但我不确定这是否是正确的方法。

6 个答案:

答案 0 :(得分: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 :(得分: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>
&#13;
&#13;
&#13;

如果你不确定值的存在,那么你需要迭代数组和文件管理器

&#13;
&#13;
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))
&#13;
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分: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"]

答案 3 :(得分:1)

您的数据采用哪种格式?如果它们是字符串并且数组是有序的,那么您可以简单地找到带有“12:00”文本的元素索引和来自该位置的切片数组。

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

答案 4 :(得分:0)

如果存在12.00

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

答案 5 :(得分: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);