从Array中获取三个最低值
Get three lowest values from Array
假设我有一个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);
相关文章:
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 如何使用PHP和JS级联三个下拉列表
- 灯光问题(使用三个.js)
- 在三个.js中创建球体(例如地球)的磁力线
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- javascript第三个XMLHttpRequest被拒绝.但前两个是允许的
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- 根据前两个下拉ID显示第三个下拉列表
- 在数组JS中查找三个重复项
- Meteor和S3:如何通过一次上传/编辑定义三个不同的图像
- 如何替换javascript字符串中的前三个连字符
- 保存两个模型(属于第三个模型)和一个提交
- 将文本字段限制为三个数字
- 三个js键盘旋转
- 匹配三个正则表达式中的任意一个,以先到的为准(在javascript中)
- 加载模型与三个.js
- 连续三个检查宾果游戏
- 我需要帮助查找我的JavaScript小游戏中的错误(三个我没有得到的错误)
- 如何在导入的 Collada 模型上使用 EdgesHelper 在三个.js.
- 从Array中获取三个最低值