从Array中获取三个最低值

时间:2016-08-12 00:29:43

标签: javascript json node.js

假设我有一个像这样的JSON对象:

{"27":[2300,2300,2700,2300,2300,2300,2500,2300,2700,2300,2300,2300,2700,2300,2700,2300,2300,2300,2300,1900,2700,2300,2300,2300]}

我想从这个数组中获取三个最低值并将其存储为另一个数组。我已经尝试sort(),但经历过它认为10000低于1300例如。

问题:如何从上面的JSON对象中获取三个最低值并将其存储为自己的数组?

这就是我尝试对数组进行排序的方法:

-prices[searchLog.PriceSearchId].sort();

2 个答案:

答案 0 :(得分:5)

试试这个。

var prices = {
  "27": [2300, 2300, 2700, 2300, 2300, 2300, 2500, 2300, 2700, 2300, 2300, 2300, 2700, 2300, 2700, 2300, 2300, 2300, 2300, 1900, 2700, 2300, 2300, 2300]
};
var leastThree = prices["27"].sort(function(a, b) {
  return a - b;
}).slice(0, 3);
console.log(leastThree);

答案 1 :(得分:0)

由于您需要固定数量的最低值,因此无需使用sort(),其时间复杂度最多为O(N * log N)

以下内容的复杂性为O(N)

var prices = {
  "27": [2300, 2300, 2700, 2300, 2300, 2300, 2500, 2300, 2700, 2300, 2300, 2300, 2700, 2300, 2700, 2300, 2300, 2300, 2300, 1900, 2700, 2300, 2300, 2300]
};
var arr = prices['27'];

var lowest = new Array(3).fill(Number.MAX_SAFE_INTEGER);

for (var i = arr.length; --i >= 0; ) {
   var x = arr[i];
   // Update "lowest" array, as appropriate
   for (var j = 0; j < lowest.length; j++) {
     if (x < lowest[j]) {
       lowest.splice(j, 0, x);
       lowest.pop();
       break;
     }
   }
}

console.log(lowest);