我有一个数组,其中包含一天中按分钟舍入的所有时间戳(~1440个条目)。我需要得到当前分钟的索引。
阵列的breif(来自控制台)就像:
0: 1516048200
1: 1516048260
2: 1516048320
3: 1516048380
我试过了:
function time() {
var timestamp = Math.floor(new Date().getTime() / 1000);
return timestamp;
}
neededIndex = time_arr.indexOf(function(){return Math.round(time()/60)*60;})); // returns -1
我使用Math.round(time()/60)*60
得到当前分钟。
neededIndex = time_arr.indexOf(1516054200); // works fine though
我缺少什么?
答案 0 :(得分:0)
var arr = [1, 2, 3, 4];
console.log(arr.indexOf((function() {
return 2;
})()))

将您的函数作为自调用函数。然后它会工作。由于你的功能从未调用过,所以它不会返回任何内容。
var date = new Date();
var time = date.getTime();
var midNight = date.setHours(0,0,0,0);
console.log(Math.trunc((time - midNight)/1000 /60))

您无需放入数组并查找索引。查找当前时间并从午夜减去并转换为分钟。
答案 1 :(得分:0)
Array.prototype.indexOf不是一个函数,而是一个值来查找。您应该使用Array.protoype.findIndex代替。
例如
"use strict";
const values = [4, 5, 2];
const indexOfFive = values.findIndex(value => value === 5);
console.log(`indexOfFive: ${indexOfFive}`);

请注意,ES2015添加了Array.prototype.findIndex
。这意味着您需要为旧运行时使用polyfill。例如
"use strict";
if (typeof Array.prototype.findIndex !== 'function') {
Array.prototype.findIndex = function findIndex(predicate) {
if (typeof predicate !== 'function') {
throw TypeError('Predicate must be a function');
}
return this.filter(predicate)[0];
};
}
答案 2 :(得分:0)
正如我在评论中所说 - 如果你有一个24小时内每分钟的数组(从0开始,每分钟有1个条目 - 总共1440个条目) - 那么你不需要比较当前分钟根本找到索引 - 使用(getHours()* 60)并添加getMinutes()以获取24小时时间范围内的当前分钟,然后由于数组的零索引而减去1。
例如 - 这是晚上7:15,所以使用此函数在运行时返回1154(即:它是第1155分钟),但是由于数组的零索引 - 这是第1154个元素的值数组。
请注意,我使用for循环来对分钟数组进行分组 - 从0到1439(由于零索引)。
var minuteArray = [];
for (i=0; i<1440; i++){
minuteArray.push(i);
}
function timeIndex() {
var now= new Date();
var minuteIndex = ((now.getHours()*60) + now.getMinutes())-1;
return minuteIndex ;
}
var timeIndex = timeIndex();
console.log('timeIndex = ' +timeIndex);
console.log('value of minute array at this index = ' + minuteArray[timeIndex]);