在 Javascript 中使用数组进行排序和中位数
Sorting and Median with Arrays in Javascript
我一直在研究这段代码,目标是整理数组中的数字,然后找到中位数。我的中位数没有正确输出,当我尝试只查看数组 [0] 中的内容时,它永远不会有正确的值。我不确定我在哪里搞砸了。
法典:
var array = [];
window.onload = function (){
var answer = '';
var median = 0;
for (var i = 0; i < 8; i++) {
var rand = Math.floor(Math.random() * 101);
array.push(rand);
array.sort(function(a, b){return a-b});
answer = answer + array[i] + " ";
}
median = ((array[3] + array[4]) /2);
document.getElementById("result").innerHTML = answer + "<br />" + median;
}
我建议首先移动你的循环结尾。目前,每次向数组添加新数字时,您都会进行排序。这意味着两件事:你浪费了计算能力在你应该只做一次的事情上,当你在行中"记录"你的结果时,answer = answer + array[i] + " ";
它不断变化,因为顺序在变化。您的函数逻辑是正确的,因此通过进行下面的更改,您应该得到所需的结果。
var array = [];
window.onload = function (){
var answer = '';
var median = 0;
//Loop is simplified to just push a random value
for (var i = 0; i < 8; i++) {
array.push(Math.floor(Math.random() * 101));
}
//Sort is outside of the loop;
array.sort(function(a, b){return a-b});
//Median is outside of the loop
median = ((array[3] + array[4]) /2);
//answer is outside of the loop (if you don't know reduce look at the link below)
answer = array.reduce( function ( answer , value ) {
return answer + ',' + value;
} );
// put into the dom
document.getElementById("result").innerHTML = answer + "<br />" + median;
}
如果您需要这方面的帮助,请随时给我发消息,也可以查看减少的文档 这里.
使用纯粹的SO帖子,我想出了一个解决方案。
- 策略
- 洗牌
起初,部分表达式(Math.floor(Math.random() * 101))
想出了重复项,这就是弱酱。Fisher-Yates(又名Knuth)Shuffle有一个优秀的算法。
您的var answer
和reduce
表达式现在已按照@hyphnKnight解释进行组合并脱离循环。没有必要进一步分解它,因为减少回报是显示排序数组所需的一切。我也用unshift
代替push
,我读到使用数组的前面比后面更快,但你无法分辨出区别,功能太小了。
片段
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>35469092</title>
</head>
<output id="result"></output>
<body>
<script>
// 1. Populate an array with the numbers 1 through 100.
var arr = [];
for(var i = 1; i <= 100; i++) {
arr.unshift(i);
}
median(arr);
function median(arr){
var median = 0;
// 2. Shuffle
var ran100 = shuffle(arr);
var ran8 = [];
for(var j = 0; j < 8; j++) {
// Take the first 8 elements of the resulting array.
ran8.unshift(ran100[j]);
}
var answer = ran8.sort(function(a, b){return a-b});
median = ((ran8[3] + ran8[4]) /2);
document.getElementById("result").innerHTML = answer + "<br />" + median;
}
function shuffle(arr) {
var curIdx = arr.length, tmpVal, randIdx;
while (0 !== curIdx) {
ranIdx = Math.floor(Math.random() * curIdx);
curIdx -= 1;
tmpVal = arr[curIdx];
arr[curIdx] = arr[ranIdx];
arr[ranIdx] = tmpVal;
}
return arr;
}
</script>
</body>
</html>
相关文章:
- AngularJs对所有页面中的所有记录进行排序
- ui网格:在自定义表头模板中触发排序
- 如何在可排序中查找值的项目 用javascript.
- 在 Javascript 中使用数组进行排序和中位数
- 当值相同时,在忽略排序中排序
- 在 RubaXa' 可排序中移动表的列
- 以 Angularjs 为单位的温度中位数
- 如何在 jquery 可排序中获取 json 数据
- 获取 jquery 可排序中列表项的顺序
- 如何忽略拓扑排序中的循环
- JavaScript与PHP在数组排序中的对比
- 如何创建一个具有给定范围、四分位数和中位数的数字列表
- 防止jQueryUI可排序中的重复项
- 如何对数组中的列表进行排序,并在排序中显示到文本框中
- 从排序中排除行- datatable.net
- Highcharts:在箱线图中显示标签(最小值,最大值,中位数等)
- 我是否需要对一个数组进行排序来找到它的中位数
- 确定数字中位数的函数出错
- JavaScript快速排序中的无限递归
- 在表格行重新排序中显示向上/向下按钮