Так даже смешнее:
Boolean { false } 'true' false
'Content-Type' => 'application/json'
withCredentials
указывать, помимо кучи всего прочего. this
в примере? Или fetch?const loadUserData = () => axios.get('/articles').then((response) => response.data);
// алгоритм распределения положительного остатка
function spreadRemainder(result, remainder) {
// сортируем по убыванию, чтоб лучшие получали прибавку первыми
const sortedKeys = Object
.keys(result)
.sort((a, b) => result[b] - result[a]);
const length = sortedKeys.length;
let i = 0;
// пока остаётся остаток проходимся по сортированным значениям
while(remainder) {
const index = sortedKeys[i++ % length];
// уменьшаем остаток на единицу
remainder--;
// увеличиваем результат на единицу
result[index]++;
}
return result;
}
function split(sum, ...results) {
// общее количество часов
const sumResults = results.reduce((a, b) => a + b);
// целочисленно делим число на общее количество часов
const part = Math.floor(sum / sumResults);
// остаток от целочисленного деления
const remainder = sum % sumResults;
// каждые часы умножаем на результат деления
const result = results.map(hours => hours * part);
// если есть остаток
if(remainder)
spreadRemainder(result, remainder);
return result;
}
split(751, 12, 18, 13); // [ 210, 313, 228 ]
// алгоритм распределения остатков
function spreadDifference(result, difference) {
const keys = Object.keys(result);
const length = keys.length;
let i = 0;
// если остаток положительный
if (difference > 0) {
// сортируем по убыванию, чтоб лучшие получали прибавку первыми
keys.sort((a, b) => result[b] - result[a]);
// пока остаётся остаток проходимся по сортированным значениям
while(difference) {
// difference всегда меньше количества людей
// потому тут i++ не может убежать за пределы keys
const index = keys[i++];
// уменьшаем остаток на единицу
difference--;
// увеличиваем результат на единицу
result[index]++;
}
} else {
// сортируем по возрастанию, чтоб худшие получали минус первыми
keys.sort((a, b) => result[a] - result[b]);
// пока остаётся остаток проходимся по сортированным значениям
while(difference) {
// difference всегда меньше количества людей, однако
// из-за нулей возможно прохождения по keys несколько раз
const index = keys[i++ % length];
// результат - ноль, не отнимаем от нуля
if(result[index] === 0)
continue;
// увеличиваем остаток на единицу
difference++;
// уменьшаем результат на единицу
result[index]--;
}
}
return result;
}
function split(sum, ...results) {
// делим число на общее количество часов
const part = sum / results.reduce((a, b) => a + b);
// каждые часы умножаем на результат деления и округляем
const result = results.map(hours => Math.round(hours * part));
// финальная сумма с учётом округлений
const resultSum = result.reduce((a, b) => a + b);
// разница между финальной суммой и изначальной
let difference = sum - resultSum;
// если есть разница
if(difference)
spreadDifference(result, difference);
return result;
}
split(751, 12, 18, 13); // [ 210, 314, 227 ]
difference
при этом никогда не больше половины количества людей, т.е. равномерно нераспределим.
Это так, в плане шутки(хотя именно так и надо делать по-хорошему), а по вопросу мало понятно чего вы хотите добиться. По пунтам распишите что было, что вы хотите чтоб стало. Где ТЗ?)