2014-01-03 3 views
7

Хорошо, поэтому мне нужно вернуть самое среднее значение в массиве. И я должен использовать Math.round для вычисления среднего индекса в массиве. Чтобы быть ясным, я не говорю о медианном , просто среднее значение.Javascript: Поиск самого среднего значения в массиве

Это то, что мне нужно сделать в тексте, так как я новичок в javascript. Однако я не знаю, как это выполнить. Есть идеи?

Кроме того, если вы считаете, этот вопрос здесь не принадлежит или является глупым, пожалуйста, направьте меня туда, где я могу найти эту информацию, я просто пытаюсь узнать здесь.

function test(arr) { 


} 
+0

данный '[11,22,33,44]', что он должен вернуть? – georg

+0

Количество чисел неравномерно, поэтому всегда есть один, который является средним –

+0

@AndrewP, вы должны были включить информацию о том, что количество чисел всегда неравномерно в вопросе, это сильно влияет на ответ. – Nenotlep

ответ

18

Если у вас есть массив, например, пяти элементов, средний элемент с индексом два:

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 и вычтите один из длины. Это все равно дает тот же результат для нечетного количества товаров:

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

Это определенно похоже на путь, я не могу заставить его работать по какой-то причине. Правильно ли поместить вторую строку кода в ваш комментарий в {} из моего исходного сообщения, а затем вернуться в середину; после этого? Будет ли это возвращать среднее значение? –

+0

@AndrewP: Да, вот как его использовать. Вот рабочий пример: http://jsfiddle.net/Guffa/xuxaL/ – Guffa

8

Получить индекс в середине массива:

var arr = [0, 0, 1, 0, 0]; 
var theMiddle = Math.floor(arr.length/2); // index 2 
var value = arr[theMiddle]; // value 1 

Однострочник:

var value = arr[arr.length/2 | 0]; 
+3

Может захотеть 'floor()' вместо этого. Если 'array.length' равно' 1', 'Math.ceil (1/2)' также является '1' и вне границ. –

+0

Итак, если массив был 5, 3, 8, то значение «Милдл» было бы 3? потому что это то, что я после –

+0

Да. Он основан на индексе, а не на значении. – A1rPun

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

Смежные вопросы