Math.max()
, forEach()
и reduce()
проходят по значениям ровно 1 раз, а sort()
может до двух (?) раз больше возвращаться к одному значению. f( a, b)
, которая сравнив два аргумента вернёт 1, –1 или 0, которые определяют как их в сортированной последовательности расположить.(a,b) => b - a
это просто короткая запись определения функции от аргументов (a,b)
которая возвращает значение b-a
, т.е. это то же самое, что function(a, b){ return b - a;}
function maxElement (list){
return list.sort((a,b) => b-a)[0];
}
dt_void
ещё не наступил иvalue_out - value_in > 0
. При этом можно считать running sum и оставновиться, когда баллов наберётся больше, чем нужно для списания.Из этих брать по одному, опять же от старых к новым и обновлять их. Сколько с самого старого (-100), обновили его value_out на 100. Сколько из следующего (опять -100). Сколько из третьего (-50), обновили его value_out на 50.
Всё это желательно делать целиком на стороне SQL и обернуть в транзакцию.