Javascript — работаем с search-частью произвольного url

    Под впечатлением от идеи создания библиотеки для работы с search-частью произвольной ссылки решил написать функцию (в соавторстве с Kupyc, респект за учаcтие — ему принадлежит бОльшая часть), выполняющую ту-же задачу:
    /**
    * Функция для модификации GET-параметров uri
    *
    * @param {String} uri
    * @param {String} paramsNew
    * @param {Boolean} [isReplace]
    * @version 0.2.1
    */

    var uriQueryParamsModifier = function (uri, paramsNew, isReplace) {
        var paramsUri = ((paramsUri = uri.match(/\?([^#]+)/)) && paramsUri[1]); 
        if (paramsUri && isReplace) {
            return uri.replace(/\?[^#]+/, !paramsNew ? '' : '?' + paramsNew );
        }    
        if (paramsNew) {
            return uri.replace(/(#)|$/, (!paramsUri ? '?' : '&') + paramsNew + '$1');
        } 
        return uri;
    }


    * This source code was highlighted with Source Code Highlighter.
    Авось кому сгодится.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 8

      +1
      Применяем рефакторинг «встраивание переменной» _result, документируем по scriptDoc, защищаемся от пустого параметра paramsNew (+ тем самым позволяем замещать пустой строкой <=> удалять) и улучшаем (улучшаем?) читабельность. Авось кому сгодится :).

      /**
       * Функция для модификации GET-параметров uri
       * 
       * @param {String} uri 
       * @param {String} paramsNew
       * @param {Boolean} [isReplace]
       *
       */
      var uriQueryParamsModifier = function (uri, paramsNew, isReplace) {
          var paramsUri;
          paramsNew = paramsNew || '';
          
          paramsUri = ((paramsUri = uri.match(/\?([^#]+)/)) && paramsUri[1]);
          
          if (paramsUri && isReplace) {
              return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : paramsNew);
          } 
          
          if (paramsNew) {
              return uri.replace(/(#)|$/, (!paramsUri ? '?' : '&') + paramsNew + '$1');
          }
          
          return uri;
      }
        0
        Согласен, хотя read-only стиль вполне подходит прагме 555 :)
        Но!
        if (paramsUri && isReplace) {
        return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : paramsNew);
        }

        ХМ.
        Масло маслянное, если у Вас paramsNew == '', так чего стесняться?
        if (paramsUri && isReplace) {
        return uri.replace(/\?[^#]+/, paramsNew ? '?' + paramsNew : '' );
        }

        И — завершающее return uri; — поясните, к чему так?
        Кроме шуток — не понимаю смысла функции, возвращающей отданный ей аргумент. Тогда уж null, что ли.
          +1
          Точно, точно, camelCase или underscore стиль — не суть. Читабельность повышается, имхо, за счет масла масляного: условия читаемы по диагонали и вертикали — 1) если есть что заменять и чем, то… 2) если есть чем модифицировать (т.к. не замена/удаление, то добавление), то… 3) вырожденное условие в виде «return uri» реализует вырожденную функцию.

          Вот последнее… тут зависит от восприятия — мне показалось, что будет менее неожиданным (Ruby?), если некий модификатор ничего не сделает с объектом ежели «обнулит» его. С другой стороны, вместо последнего return м. б. и исключение, и return null, в зависимости от требования внешней среды.
            0
            Профиксил до читабельного варианта (было — Perl!), избавился от лишнего кода (правда умерло масло маслянное — уж не обессудьте ), с «return uri» — согласный.
          0
          код можно сильно сократить вставив в начало функции
          if (!paramsNew)
          return uri;

          ну и судя по логике работы, она должна называться uriQueryParamsModifie[d]
            0
            нельзя сократить. Вчитайтесь.
              0
              if (paramsUri && isReplace)
              return uri.replace(/\?[^#]+/, '?' + paramsNew);
              return uri.replace(/(#)|$/, (!paramsUri? '?': '&') + paramsNew + '$1');

              в Вашем варианте paramsNew проверяется 3 раза (зачем?).
              кроме этих проверок, при пустом paramsNew обрабатываются регулярные выражения (одно или два, если параметры уже есть). зачем все это, если заранее известен результат?
                0
                А, мой косяк.
                Смотрите последнюю (обновленную) версию, там сократить нельзя.

        Only users with full accounts can post comments. Log in, please.