Javascript 中数组的中位数?
Median of an array in Javascript?
我正在尝试查找数组的中位数。
我做了很多研究,如果这个问题似乎被问了好几次,没有一个答案令人满意。
创建我的数组效果很好,但是当我调用函数时,数组已排序,但它 returns 不同的值,从 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:要停止填充数组,只需输入空值即可。)
您的代码有 2 个问题:
- 您在填充数组之前计算
half
,因此它始终为 0。
- 您将数字保存为字符串,因此当您添加它们时,您不会得到正确的结果。
工作:
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);
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)
会return(例如)4
就是长度是8
。但是,如果您执行 ar1[4]
它实际上会 return 数组中的 fifth 项,因为数组索引从零。所以ar1[4-1]
将return第四项,加上ar1[4]
也就是第五项再除以二求中位数。如果长度为奇数,则return(例如)如果长度为7
,则3
。然后它检索 arr[3]
这是第四项,它是中位数。
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);
我正在尝试查找数组的中位数。 我做了很多研究,如果这个问题似乎被问了好几次,没有一个答案令人满意。
创建我的数组效果很好,但是当我调用函数时,数组已排序,但它 returns 不同的值,从 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:要停止填充数组,只需输入空值即可。)
您的代码有 2 个问题:
- 您在填充数组之前计算
half
,因此它始终为 0。 - 您将数字保存为字符串,因此当您添加它们时,您不会得到正确的结果。
工作:
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);
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)
会return(例如)4
就是长度是8
。但是,如果您执行 ar1[4]
它实际上会 return 数组中的 fifth 项,因为数组索引从零。所以ar1[4-1]
将return第四项,加上ar1[4]
也就是第五项再除以二求中位数。如果长度为奇数,则return(例如)如果长度为7
,则3
。然后它检索 arr[3]
这是第四项,它是中位数。
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);