Не могу в цикле удалить все элементы массива.
Медиана — это такое число выборки, что ровно половина из элементов выборки больше него, а другая половина меньше него.
Получается проблемма закулючается в том что не все элементы убираются в дилнныйх массивах, при переборе и удалении. Не знаю чего может не хватать, вроде бы по моей логике всё должно работать, но уберает всего несколько элементов из длинных массивов.
В случае же с короткими массивами всё отлично работает. Подскажите где я что не правильно сделал.
function median(data) {
var count = 0;
data.sort((a, b) => a - b);
for (var i = 0; i < data.length; i++) {
if (data.length % 2 === 0) {
data.pop();
data.shift();
} else if (data.length % 2 === 1) {
data.pop();
data.shift();
}
if (data.length === 2) {
for (var j = 0; j < data.length; j++) {
count = (data[0] + data[1]);
return count / 2;
}
}
}
return data;
}
console.log(median([1, 2, 3, 4, 5]));
console.log(median([3, 1, 2, 5, 3]));
console.log(median([1, 300, 2, 200, 1]));
console.log(median([3, 6, 20, 99, 10, 15]));
console.log(median([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));
console.log(median([0,7,1,8,4,9,5,6,2,3]));
console.log(median([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]));
console.log(median([2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]));
Потому что вы модифицируете массив, по которому бежите. Не знаю, зачем вам вообще цикл, достаточно проверить, что если чилсо элементов четное, то взять два из середины и усреднить, если нет, то взять центральную чиселку.
Если же исправлять ваше то вот пример:
function median(data) {
var count = 0;
data.sort((a, b) => a - b);
do {
data.pop();
data.shift();
} while (data.length > 2)
if (data.length === 2) {
for (var j = 0; j < data.length; j++) {
count = (data[0] + data[1]);
return count / 2;
}
}
return data[0];
}
console.log(median([1, 2, 3, 4, 5]));
console.log(median([3, 1, 2, 5, 3]));
console.log(median([1, 300, 2, 200, 1]));
console.log(median([3, 6, 20, 99, 10, 15]));
console.log(median([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));
console.log(median([0,7,1,8,4,9,5,6,2,3]));
console.log(median([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]));
console.log(median([2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]));
function median(data) {
data.sort((a, b) => a - b);
if (data.length % 2) {
return data[Math.floor(data.length / 2)];
} else {
return (data[data.length / 2] + data[data.length / 2 - 1]) / 2;
}
}
console.log(median([1, 2, 3, 4, 5]));
console.log(median([3, 1, 2, 5, 3]));
console.log(median([1, 300, 2, 200, 1]));
console.log(median([3, 6, 20, 99, 10, 15]));
console.log(median([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));
console.log(median([0, 7, 1, 8, 4, 9, 5, 6, 2, 3]));
console.log(median([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]));
console.log(median([2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]));
Но куда логичнее было бы сделать так:
const median = arr => {
const arrayHalf = arr.length / 2
const sorted = [].concat(arr).sort((a,b) => a - b)
return arr.length % 2 === 0
? (sorted[arrayHalf] + sorted[arrayHalf + 1]) / 2
: sorted[~~(arrayHalf)]
}
console.log(median([1, 2, 3, 4, 5]));
console.log(median([3, 1, 2, 5, 3]));
console.log(median([1, 300, 2, 200, 1]));
console.log(median([3, 6, 20, 99, 10, 15]));
console.log(median([10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]));
console.log(median([0,7,1,8,4,9,5,6,2,3]));
console.log(median([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]));
console.log(median([2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть переменная a, равная 'A13', как разделить ее на букву A и число 13, чтобы получилось var b=['A', '13']
Решил попробовать поработать с VK_API не зная JS, JSON, JQuery
У меня есть POST запрос: 'https://mysterious-reef-29460herokuapp