假设我有一个像这样的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();
答案 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);