Conversation
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Пройдено тестов 7 из 16 |
|
🍅 Пройдено тестов 6 из 16 |
по временной зоне банка
|
🍅 Пройдено тестов 6 из 16 |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Не пройден линтинг или базовые тесты |
robbery.js
Outdated
| return dates[0]; | ||
| } | ||
|
|
||
| function toFreeSchedule(schedule) { |
There was a problem hiding this comment.
Наверное, здесь функция должна называться getFreeTimes? Или можешь придумать еще понятнее?
| schedule.Linus.forEach(function (k) { | ||
| begin = compareDate (1, i.from, j.from, k.from); | ||
| end = compareDate (-1, i.to, j.to, k.to); | ||
| if (end > begin) { |
There was a problem hiding this comment.
- Очень большая вложенность.
- Идет привязка с именам бандитов, что не есть хорошо. Вдруг они изменят состав?
- Переменные
beginиendинициализированы далеко от места использования, и неясно, начало и конец чего они обозначают. i,j,kтоже никак себя не объясняют.
robbery.js
Outdated
| for (var i = day1; i <= Math.min(day2, 3); i++) { | ||
| res.push({ | ||
| from: compareDate (1, new Date (YEAR, MONTH, i, 0, 0), interval.from), | ||
| to: compareDate (-1, new Date (YEAR, MONTH, i, 23, 59), interval.to) |
robbery.js
Outdated
| }; | ||
| } | ||
|
|
||
| function findFreeIntervals(freeTime, workingHours, res) { |
There was a problem hiding this comment.
Здесь больше подойдет глагол get. Ты же его возвращаешь?)
robbery.js
Outdated
| return res; | ||
| } | ||
|
|
||
| function mainFunction(timeToRobbery, msInDuration) { |
There was a problem hiding this comment.
Это название функции тоже не годится)
robbery.js
Outdated
| function mainFunction(timeToRobbery, msInDuration) { | ||
| var res = []; | ||
| var n = timeToRobbery.length; | ||
| var c = 0; |
There was a problem hiding this comment.
Однобуквенных переменных вообще быть не должно, только если в крайних случаях это не цикл по индексам.
robbery.js
Outdated
| c++; | ||
| } | ||
| } | ||
| if (c === 0) { |
There was a problem hiding this comment.
Можно записать в 1 строку тернарными операторами)
robbery.js
Outdated
| if (number < 10) { | ||
| number = '0' + number; | ||
| } | ||
| number = String(number); |
There was a problem hiding this comment.
Есть метод toString на крайний случай
robbery.js
Outdated
| console.info(schedule, duration, workingHours); | ||
| var newSchedule = {}; | ||
| var gmt = parseInt (workingHours.from.slice(5), 10); | ||
| var msInDuration = 60 * 1000 * duration; |
|
Исправлены не все замечания с прошлого раза. Советую тебе перечитать гайд по оформлению кода. |
|
🍅 |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍅 Пройдено тестов 10 из 16 |
|
🍏 Пройдено тестов 16 из 16 |
| var currentDay = WEEK.indexOf(dayOfWeek); | ||
| var hours = parseInt(date.slice(3, 5), 10); | ||
| var timeZone = parseInt(date.slice(8), 10); | ||
| hours = hours - timeZone + bankTimeZone; |
There was a problem hiding this comment.
можно же так: hours += bankTimeZone - timeZone
| function maxDate() { | ||
| var dates = [].slice.call(arguments); | ||
| dates.sort(function (date1, date2) { | ||
|
|
There was a problem hiding this comment.
Почему нельзя воспользоваться функцией Math.max?
There was a problem hiding this comment.
у меня не работает Math.max для дат
There was a problem hiding this comment.
О, давай через reduce. Типа пройти по всем датам и найти такую, которая больше других. Очевидно, что sort имеет сложность больше линейной - O(log(n) * n), а reduce будет O(n)
| return dates[0]; | ||
| } | ||
|
|
||
| function findFreeGangsterTime(schedule, bankTimeZone) { |
There was a problem hiding this comment.
Функция должна занимать не больше 25 строк
There was a problem hiding this comment.
Кажется, что можно сначала просчитать все leadToDataType(schedule[key][i].to, bankTimeZone) для каждого i, а потом заполнить ими словарь.
|
|
||
| function getGangFreeTime(schedule) { | ||
| var freeTime = []; | ||
| schedule.Danny.forEach(function (interval1) { |
There was a problem hiding this comment.
Привязка к именам бандитов. И слишком большая вложенность. Такого быть не должно. Нельзя ли просто по ключам пробежаться?
There was a problem hiding this comment.
+1
так делать совсем нельзя - а если будет сколько угодно бандитов или имена могу быть другими?
| } | ||
|
|
||
| function formateDate(date) { | ||
| var day = date.getDate(); |
There was a problem hiding this comment.
Не проще ли сделать так: var day = WEEK[date.getDate()]?
Почему словарь называется WEEK? Почему метод getDate возвращает день?
| return res; | ||
| } | ||
|
|
||
| function leadDateToObject(date) { |
| exports.isStar = false; | ||
|
|
||
| var WEEK = ['', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; | ||
| var BEGIN_OF_WEEK = new Date (0, 0, 1, 0, 0); |
There was a problem hiding this comment.
Ты уверена, что без этих волшебных дат тут не обойтись?
| } | ||
|
|
||
| function formateFreeTime(freeTime) { | ||
| var res = []; |
| var begin = maxDate (interval1.from, interval2.from, interval3.from); | ||
| var end = minDate (interval1.to, interval2.to, interval3.to); | ||
| if (end > begin) { | ||
| freeTime.push({ |
There was a problem hiding this comment.
Ты много где пушишь объект с этими полями. Можно вынести в отдельную функцию
|
🚀 |
Vittly
left a comment
There was a problem hiding this comment.
в целом неплохо, но:
- есть косяки в названиях
- где-то слишком многословно
- совсем не используешь reduce
надо поправить, сорри за задержку - мой косяк не увидел отбивку. В следующий раз пиши в slack если буду тормозить
🍅
| return freeTime; | ||
| } | ||
|
|
||
| function formateFreeTime(freeTime) { |
There was a problem hiding this comment.
судя по смыслу, аргумент лучше назвать freeIntervals
There was a problem hiding this comment.
а почему такое название функции? formatE ? Судя по коду, мы тут интервалы пересекаем с [ПН, СР] и интервалы разбиваем по дням. Это скорее некая нормализация - normalizeIntervals
| for (var i = day1; i <= Math.min(day2, 3); i++) { | ||
| res.push({ | ||
| from: maxDate (new Date (0, 0, i, 0, 0), interval.from), | ||
| to: minDate (new Date (0, 0, i, 23, 59), interval.to) |
There was a problem hiding this comment.
а что за даты такие? Чтобы стало понятнее, нужно сделать переменные с говорящими именами
There was a problem hiding this comment.
мы тут пытаемся разложить interval на отрезки по дням? и в итоге будут теже интервалы разложенные по дням - так? forEach, который собирает некий результат - лучше писать через reduce
| var res = []; | ||
| freeTime.forEach(function (interval) { | ||
| var day1 = interval.from.getDate(); | ||
| var day2 = interval.to.getDate(); |
There was a problem hiding this comment.
хм, возможно, лучше назвать fromDay и toDay.
| freeTime.forEach(function (interval) { | ||
| var day1 = interval.from.getDate(); | ||
| var day2 = interval.to.getDate(); | ||
| for (var i = day1; i <= Math.min(day2, 3); i++) { |
| function maxDate() { | ||
| var dates = [].slice.call(arguments); | ||
| dates.sort(function (date1, date2) { | ||
|
|
There was a problem hiding this comment.
О, давай через reduce. Типа пройти по всем датам и найти такую, которая больше других. Очевидно, что sort имеет сложность больше линейной - O(log(n) * n), а reduce будет O(n)
| to: end | ||
| }); | ||
| } | ||
| }); |
There was a problem hiding this comment.
опять по смыслу reduce = проход по массиву и получение одного результата
| var bank = {}; | ||
| freeTime.forEach(function (interval) { | ||
| var day = interval.from.getDate(); | ||
| bank.start = new Date (0, 0, day, startBankWork.hours, startBankWork.minutes); |
There was a problem hiding this comment.
ты часто используешь конструкцию: new Date(0, 0, x, y, z) - кмк для нее лучше завести хелпер-функцию с говорящим именем, тогда такие вызовы будут не такими таинственными
| freeTime.forEach(function (interval) { | ||
| var day = interval.from.getDate(); | ||
| bank.start = new Date (0, 0, day, startBankWork.hours, startBankWork.minutes); | ||
| bank.end = new Date (0, 0, day, endBankWork.hours, endBankWork.minutes); |
There was a problem hiding this comment.
а зачем нам объект? можно было бы сделать две переменные - bankStart и bankEnd
| if (timeToRobbery[i].to - timeToRobbery[i].from >= msInDuration) { | ||
| res.push(timeToRobbery[i]); | ||
| } | ||
| } |
There was a problem hiding this comment.
опять reduce нужен, смотри как коротко получается:
var intervals = timeToRobbery.reduce(function(res, interval) {
if (interval.to - interval.from >= msInDuration) {
res.push(interval);
}
return res;
}, []);и в конце можно написать тернарник: return intervals.length === 0 ? nul : intervals;
| exists: function () { | ||
| return false; | ||
|
|
||
| return (timeForRobbery !== null); |
No description provided.