Javascript中数组的中值?
我试图找到数组的中值。 我做了很多研究,如果这个问题被问了好几次,没有一个答案是令人满意的 创建我的数组效果很好,但当我调用函数时,数组被排序,但它返回不同的值,从NaN到数组的第一个值 如何找到长度的中值,然后从它的索引中找到数组的中值Javascript中数组的中值?,javascript,arrays,median,Javascript,Arrays,Median,我试图找到数组的中值。 我做了很多研究,如果这个问题被问了好几次,没有一个答案是令人满意的 创建我的数组效果很好,但当我调用函数时,数组被排序,但它返回不同的值,从NaN到数组的第一个值 如何找到长度的中值,然后从它的索引中找到数组的中值 var ar1=[]; while(true){ var enterValues=提示(“输入您的值”); 如果(输入值!=“”){ ar1.推送(输入值); }否则{ 打破 } } 函数calcMedian(){ var half=数学楼层(ar1.1/2
var ar1=[];
while(true){
var enterValues=提示(“输入您的值”);
如果(输入值!=“”){
ar1.推送(输入值);
}否则{
打破
}
}
函数calcMedian(){
var half=数学楼层(ar1.1/2);
ar1.sort(函数(a,b){返回a-b;});
如果(ar1.2){
返回ar1[一半];
}否则{
返回(ar1[half]+ar1[half]+1)/2.0;
}
}
控制台日志(ar1);
console.log(ar1.length);
log(calcMedian());
控制台日志(ar1)代码>您的代码中有两个问题:
在填充数组之前,先计算half
,使其始终为0
您将数字另存为字符串,以便在添加数字时不显示它们;我得不到正确的结果
工作:
var ar1=[];
while(true){
var enterValues=提示(“输入您的值”);
如果(输入值!=“”){
ar1.推送(+输入值);
}否则{
打破
}
}
函数calcMedian(){
var half=数学楼层(ar1.1/2);
ar1.sort(函数(a,b){返回a-b;});
如果(ar1.2){
返回ar1[一半];
}否则{
返回(ar1[half]+ar1[half]+1)/2.0;
}
}
控制台日志(ar1);
console.log(ar1.length);
log(calcMedian());
控制台日志(ar1)代码>
var ar1=[];
while(true){
var enterValues=提示(“输入您的值”);
如果(输入值!=“”){
ar1.push(parseFloat(enterValues));
}否则{
打破
}
}
函数calcMedian(){
var half=数学楼层(ar1.1/2);
ar1.sort(函数(a,b){返回a-b;});
如果(ar1.2){
返回ar1[一半];
}否则{
返回(ar1[half-1]+ar1[half])/2.0;
}
}
控制台日志(ar1);
console.log(ar1.length);
log(calcMedian());
控制台日志(ar1)代码>提示很烦人:(数组的中值只是中间元素:arr[Math.floor(arr.length/2)]
。不确定“如何找到长度的中值”是什么意思提示是尝试几个长度,如果愿意,只需删除它并创建自己的数组,不会改变最终结果,也不会改变我对正确方法的理解。“1”+“2”表示“12”为什么数字的点没有小数部分?javascript只知道数字。它也应该是return(ar1[half]+ar1[half+1])/2.0;
实际上,在再次查看代码后,它应该是return(ar1[half-1]+ar1[half])/2.0;
不过,感谢您提供变量的位置,我完全没有注意到这一点!请添加您更改的内容和原因。
let values = [2, 56, 3, 41, 0, 4, 100, 23];
values.sort(function(a,b) {
return a - b;
});
let lowMiddle = Math.floor( (values.length - 1) / 2);
let highMiddle = Math.ceil( (values.length - 1) / 2);
let median = ( values[lowMiddle] + values[highMiddle]) / 2;
console.log(median);