JavaScript:在数组中找到最中间的值

28

好的,我需要做的是返回数组中最中间的值。我应该使用Math.round来计算数组中间索引的位置。只是为了明确起见,我不是在谈论中位数,而只是中间的数值。

这就是我需要在文本中完成的任务,由于我对JavaScript还比较新,因此不太清楚如何执行。您有什么想法吗?

如果您认为这个问题不适合这里或者很愚蠢,请指导我到可以找到这些信息的地方,我只是想在这里学习。

function test(arr) {


}

1
给定 [11,22,33,44],它应该返回什么? - georg
1
数字的数量不均,因此总有一个是中间的。 - Andrew P
3
@AndrewP,你应该在问题中包含数字数量总是奇数的信息,这会对答案产生很大影响。 - Joel Peltonen
3个回答

70

如果你有一个包含五个元素的数组,那么中间的元素位于索引二:

var arr = [ item, item, middle, item, item];

将长度除以二并使用Math.round会得到索引三而非两,因此您需要先从长度中减去一:

var middle = arr[Math.round((arr.length - 1) / 2)];

你在问题中提到你需要使用 Math.round,但如果这不是必须的话,你可以更容易地使用 Math.floor 来获得相同的结果:

var middle = arr[Math.floor(arr.length / 2)];

对于元素数量为偶数的数组,这将给出位于中间的两个项中的第二个。如果你想要第一个,使用Math.floor并从长度中减去1。这仍然对于元素数量为奇数的数组得到相同的结果:

var middle = arr[Math.floor((arr.length - 1) / 2)];

这绝对是正确的方法,但出于某些原因我无法使其工作。我是否正确地将代码的第二个字符串放入您评论中的{}中,并在其后返回middle?这样会返回中间值吗? - Andrew P
1
@AndrewP:是的,就是这样使用。这里有一个可用的示例:http://jsfiddle.net/Guffa/xuxaL/ - Guffa

24
获取数组的中间索引:
const arr = [0, 0, 1, 0, 0];
const theMiddle = Math.floor(arr.length / 2); // index 2
const value = arr[theMiddle]; // value 1

一行代码:

const value = arr[arr.length / 2 | 0];

4
可能应该使用floor()函数。如果array.length1,则Math.ceil(1/2)也会是1并且越界。 - Jonathan Lonowski
所以如果数组是5、3、8,那么中间值应该是3?因为这正是我想要的。 - Andrew P
是的,它是基于索引而非值来实现的。 - A1rPun
1
请为一行代码投票。 - alemjerus

2
你也可以尝试这个:
function test(arr){      
  var middle_index = parseInt((arr.length/2).toFixed(), 10) - 1;
  if(middle_index === -1)
    alert('Array empty');
  else
    alert('Middle value in array ['+arr+'] is '+arr[middle_index]);
}

DEMO Link


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接