找到数组js中的最小值

时间:2014-05-29 12:23:09

标签: javascript

我有一个数组数组,每个数组都包含两个值 - 时间戳和价格。

[
  [1147651200000, 376.2],
  [1147737600000, 350],
  [1147824000000, 374.5]
] 

我需要在所有点中找到价格最低的日期和时间。 我应该使用什么功能,请帮忙。

编辑:

谢谢大家!我接受了测试,看看哪个功能最快。 这是我做的方式(例如.sort,其他是相同的)

console.time('cycle');
var k = 0;
while (k<10000) {
var input = [
  [1147651200000, 376.2],
  [1147737600000, 350],
  [1147824000000, 374.5]
];

var output = input.sort(function(a,b){
  return a[1] > b[1];
})[0];
k++;
}
console.log(output);
console.timeEnd('cycle'); //36 ms

.map //67 ms
minimum in cycle // 108 ms

4 个答案:

答案 0 :(得分:2)

试试:

var input = [
  [1147651200000, 376.2],
  [1147737600000, 350],
  [1147824000000, 374.5]
];

var output = input.sort(function(a,b){
  return a[1] > b[1];
})[0];

输出:

[1147737600000, 350]

答案 1 :(得分:2)

对数组进行排序是O(N logN) - 如果使用大型数组的性能可能是一个问题,那么这是一个O(N)解决方案:

var min = a[0];
for (var i = 1; i < a.length; i++) {
    if (a[i][1] < min[1]) {
        min = a[i];
    }
}

// min is now [1147737600000, 350]

答案 2 :(得分:1)

将数组中的数字转换为新数组,使用Math.min获取最低数据,然后回溯以获取时间戳。

var arr = [
  [1147651200000, 376.2],
  [1147737600000, 350],
  [1147824000000, 374.5]
] 

var numbs     = arr.map(function(x) { return x[1]||0 });
var timestamp = arr[numbs.indexOf(Math.min.apply( Math, numbs ))][0];

FIDDLE

答案 3 :(得分:0)

也许是这样的?

var min = arr[0][1];
var timestamp = 0;
for(i in arr) {
    if(arr[i][1] <= min ) {
        min = arr[i][1];
        timestamp = arr[i][0];
    }
}