我有一个数组数组,每个数组都包含两个值 - 时间戳和价格。
[
[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
答案 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];
答案 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];
}
}