- 1
- 2
while (st.indexOf(" ") != -1)
st = st.replace(" ", " ");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
while (st.indexOf(" ") != -1)
st = st.replace(" ", " ");
но я не раз писал подобный код для чистки е-буков: замена nbsp (0xA0) на обычный пробел (0x20). но на самом деле там все еще хуже: https://www.cs.tut.fi/~jkorpela/chars/spaces.html
предлагаю запилить модуль для нода: 2SpacesToOneSpace
Регулярки с g - интересно, но (1) их надо учить ради этого и (2) как быть с произвольными строками?
Допустим, мы хотим убрать все пробелы в строке тремя различными способами, можно сравнить их быстродействие:
st=st2=st3=document.body.innerHTML
//вариант выше
console.time('test1');
while(st.indexOf(" ")!=-1) st=st.replace(" ","");
console.timeEnd('test1');
//split + join
console.time('test2');
st2=st2.split(' ').join('');
console.timeEnd('test2');
//используем регулярные выражения
console.time('test3');
st3=st3.replace(/ /g,'');
console.timeEnd('test3');
Либо быстро и для конкретных строк, либо медленно. Нехорошо это.
мне казалось что они PCRE? или нет? в PCRE можно \Q & \E пользоваться - в пользовательском вводе надо только `\` эскэйпить.
Но я такого в JS не видел, в популярных реализациях тоже не наблюдается.
полезных модулей та мнет
https://www.npmjs.com/search?q=useable
>>Parser for HTTP status codes, turning them into something more useable.
какие-то распятые мальчики же
JS настолько хуевый язык, что в нем реально нужен IsNumber
А как же любимый фсеми функцианальный подход:? foreach по строке как-никак.
Или как это в терминах хацкиля: map filter fold
с ecma6 питушнёй => даже писать немного.
Можно было б даже пойти на радикальные меры и выпилить классическую императивную часть if/for/while, заменив функциями IF(condition() , then(), else()), WHILE (cond,body)
Тогда сахарок => обоснован.
Решение! Только хотелось бы чего-то стандартного, оптимизированного какими-нибудь экмацарями.
> Прототипы наверное тоже
Полезная штука, только для Object сделать методы has, hasnot, get, set, чтоб операции над объектами работали для хэшей. Ну и функцию наследования полей добавить. Если не фичами и сахарком, то хоть функциями у Object это осуществить. Ещё хорошо бы иметь Object.proto(obj) и Object.this(obj), которые возвращают прототип и сам объект без прототипа соответственно.
> (_)=>
Эти скобки даже опустить можно было. Любопытное решение получается.
Правда, для функции с несколькими выражениями придётся {} добавить, в конце будет знаменитое });
Вообще, что на жс ни пиши, в конце всегда к }); приходишь.
Её использование навязывает убогие т.н. js-классы => ООП.
Язык и без этого очень функциональный и тьюринг полный.
>Ну и функцию наследования полей добавить.
Меня уже тошнит при слове "наследование". Реально ведь херовый способ повторного использования.
И чего все всё норовят в js жабу притащить.
Плюс эти блядские вечно торчащие поля valueOf и toString. Не раздражают, не?
JSON.stringify(obj) нормально ведь работает. Без всяких прототипов. Но нет, блядь хочу методы через точку вызывать.
А расскажите-ка про хорошие способы повторного использования.
Анонимные поля в go, трейты/миксины.
наследовать хорошо интерфейсы (или протоколы или абстрактные классы)
А когда у тебя 5 уровней наследования то ОЧЕНЬ СЛОЖНО сделать ВНЯТНЫЙ интерфейс и понять что где кого переопределило, особенно когда у тебя жаба и все оверрайдится по умолчанию
А уж если у тебя есть виртуальные и невиртуальные методы (разные языки со словом Си) то еще круче
Есть класс Man у которого есть метод go есть класс Woman которому нужно сделать метод goBarbershop
Давай делегируй
Оба наследуют интерфейс HumanWithLegs и передают туда вызовы.
Гугли "замена делегирования наследованием".
entity Abstract
а потом сверху обмазывать декораторами с готовой реализацией
Пару недель назад меня озадачили приделыванием gometalinter к нашему проекту. В его состав входит линтер который ищет явно скопипащеный код. Я запустил и заплакал. Потом подумал, и решил ему скормить несколько относительно больших сторонних проектов, и тут я понял, что жопа она универсальная. Хваленое отсутствие наследования в Го не оставит копипастеров без работы. Я даже удалил парочку интерфейсов, и заменил их копипастой: всего-то нужно было скопировать раза три или пять - подумаешь, мелочи.
И ругается на остальной?
А линтер ругается на оставшийся код, чтобы не выябывались, а копипастили, как нормальные люди.
Одинаковые куски кода выносятся в функцию, везде торчит ссылка и вуаля!
Да и вообще копировать код гораздо проще, чем писать универсальный. Даже сопровождение копипасты не такое трудное, как сопровождение кода использующего наследование
[/quote]
Сивокобыл конечо запредельный питух, просто шоколадные треды говнокода
Тела функций ведь не инфиксные.
Если и вам мешают пробелы, попробуйте найти свой способ самой быстрой замены. Предположим, что в тексте есть подстроки длиной не более чем в L пробелов (могут встречаться строки пробелов любой длины от 1 до L). Ваша задача — определить минимальное количество замен, исправляющих группы подряд идущих пробелов на один, и составить план проведения таких замен. Если таких планов несколько, то вы должны выбрать среди них оптимальный — такой, который позволяет заменить любую последовательность пробелов длины не более K (K ≥ L) для максимально возможного K. Если есть несколько оптимальных планов замены, можете вывести любой из них.