从Array中获取三个最低值

Get three lowest values from Array

本文关键字:三个 最低值 Array 获取      更新时间:2023-09-26

假设我有一个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();

试试这个。

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);

由于需要固定数量的最低值,因此不需要使用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);