Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
return (~ memo.indexOf(item) ? null : memo.push(item)), memo; — хочется обратиться ко всем начинающим (или «продолжающим») JS разработчикам — не пишите так никогда. Совсем никогда. Вы можете подумать, что это какой-то крутой, «джедайский» код — который позволяет очень лаконично выразить вашу бизнес-логику, используя доступные только «гуру» «экзотические» операторы и конструкции.return (~ memo.indexOf(item) ? null : memo.push(item)), memo;иif(memo.indexOf(item) < 0) memo.push(item); return memo;
function uniq$viaReduce (array)
{
return array.reduce(function (memo, item)
{
if(memo.indexOf(item) < 0) memo.push(item);
return memo;
}, []);
};
then. Это сделает дифф чище, если условие или одна из ветвей будет меняться по отдельности. Ну, и как уже заметили, лучше использовать сравнение с -1, потому что это флаговое значение.reduce. Возможно он не так быстр, как простой плоский цикл, и стоило бы придраться именно к этому :)return (~ memo.indexOf(item) ? null : memo.push(item)), memo;exists(item) → Boolean? Это было бы и вправду круто, но в защиту indexOf скажу, что у него есть одно достоинство. Зачастую, если элемент найден мы должны с ним что-то сделать далее, а для этого нужен его индекс. Т.е. возврат indexOf сначала используется для проверки «есть-нету», и если «есть», то далее с этим что-то сделать (splice, например, или получение по индексу).~array.indexOf(foo) давно устоялось и смотрится явно красивее сравнения с магическими цифрами 0 и -1. Если перед indexOf унарное «не» — явно проверка вхождения, сравнение с чем-то — еще нужно подумать. Улучшать читаемость кода для говнокодеров в ущерб себе я, например, не намерен.if (ret ^ not) { .. }. А не то в итоге мы получаем людей, которые не знают базовых понятий, регеспов, зачем parseInt второй параметр, не понимающих 5.67e8 или .911, прототипы и т.п.function (rights) {
return ~[rights].indexOf('write')
? fs.writeFile(...)
: next(throw new Error());
}
function (rights) {
if ([rights].indexOf('write') !== -1) {
return fs.writeFile(...)
} else {
return next(throw new Error());
}
}
function (rights) {
if ([rights].indexOf('write') !== -1) {
return fs.writeFile(...)
}
return next(throw new Error());
}
valueOf. Сразу понимаешь, что не всё ещё сказано и использовано, и в JS ещё вагон разных интересных штук.reduce, я её в парсинге после первичного разбора строки использую…
Функция reduce