Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中数组的中值?_Javascript_Arrays_Median - Fatal编程技术网

Javascript中数组的中值?

Javascript中数组的中值?,javascript,arrays,median,Javascript,Arrays,Median,我试图找到数组的中值。 我做了很多研究,如果这个问题被问了好几次,没有一个答案是令人满意的 创建我的数组效果很好,但当我调用函数时,数组被排序,但它返回不同的值,从NaN到数组的第一个值 如何找到长度的中值,然后从它的索引中找到数组的中值 var ar1=[]; while(true){ var enterValues=提示(“输入您的值”); 如果(输入值!=“”){ ar1.推送(输入值); }否则{ 打破 } } 函数calcMedian(){ var half=数学楼层(ar1.1/2

我试图找到数组的中值。 我做了很多研究,如果这个问题被问了好几次,没有一个答案是令人满意的

创建我的数组效果很好,但当我调用函数时,数组被排序,但它返回不同的值,从NaN到数组的第一个值

如何找到长度的中值,然后从它的索引中找到数组的中值

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