Javascript中数组的中位数?

时间:2018-02-13 22:17:47

标签: javascript arrays median

我试图找到一个数组的中位数。 我做了很多研究,如果这似乎被多次询问,没有答案令人满意。

创建我的数组工作得很好但是当我调用该函数时,数组已经排序,但它返回不同的值,从NaN到数组的第一个值

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

var ar1 = [];

while (true) {
  var enterValues = prompt("enter your values");
  if (enterValues != "") {
    ar1.push(enterValues);
  } else {
    break;
  }
}

function calcMedian() {
  
  var half = Math.floor(ar1.length / 2);
  ar1.sort(function(a, b) { return a - b;});

  if (ar1.length % 2) {
    return ar1[half];
  } else {
    return (ar1[half] + ar1[half] + 1) / 2.0;
  }
}

console.log(ar1);
console.log(ar1.length);
console.log(calcMedian());
console.log(ar1);

(ps:停止填充数组,只输入没有值。)

3 个答案:

答案 0 :(得分:3)

您的代码中有2个问题:

  1. 在填充数组之前计算half,使其始终为0.
  2. 您将数字保存为字符串,这样当您添加它们时,您就不会得到正确的结果。
  3. 工作:

    var ar1 = [];
    
    
    while (true) {
      var enterValues = prompt("enter your values");
      if (enterValues != "") {
        ar1.push(+enterValues);
      } else {
        break;
      }
    }
    
    function calcMedian() {
      var half = Math.floor(ar1.length / 2);
      ar1.sort(function(a, b) { return a - b;});
    
      if (ar1.length % 2) {
        return ar1[half];
      } else {
        return (ar1[half] + ar1[half] + 1) / 2.0;
      }
    }
    
    console.log(ar1);
    console.log(ar1.length);
    console.log(calcMedian());
    console.log(ar1);

答案 1 :(得分: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);

答案 2 :(得分:-1)



var ar1 = [];

while (true) {
  var enterValues = prompt("enter your values");
  if (enterValues != "") {
    ar1.push(parseFloat(enterValues));
  } else {
    break;
  }
}

function calcMedian() {
  var half = Math.floor(ar1.length / 2);
  
  ar1.sort(function(a, b) { return a - b;});
  
  if (ar1.length % 2) {
    return ar1[half];
  } else {
    return (ar1[half-1] + ar1[half]) / 2.0;
  }
}

console.log(ar1);
console.log(ar1.length);
console.log(calcMedian());
console.log(ar1);




Math.floor(ar1.length)将返回(例如)4,其长度为8。但是,如果你执行ar1[4],它将实际返回数组中 第五个 项,因为数组索引从零开始。因此ar1[4-1]将返回第四项,将其添加到ar1[4]这是第五项并将其除以2以找到中位数。如果长度为奇数,则如果长度为3,则返回(例如)7。然后它检索arr[3],这是第四个项目,即中位数。