在javascript中无法使用indexOf获取数组索引

时间:2018-01-16 07:45:35

标签: javascript

我有一个数组,其中包含一天中按分钟舍入的所有时间戳(~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

我缺少什么?

3 个答案:

答案 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]);