【问题标题】:Parsing URL string with lodash用 lodash 解析 URL 字符串
【发布时间】:2016-12-23 09:13:10
【问题描述】:

如何仅使用 lodash 函数解析 URL 字符串,而不使用任何内部回调?

例如

var rawUrl = “?a=b454&c=dhjjh&f=g6hksdfjlksd..”

我目前的解决方案是

var answer = _.reduce(_.split(_.replace(rawUrl,'?',''), '&'), function(result, ev) {
    (result[ev.split('=')[0]] || (result[ev.split('=')[0]] = [])).push(ev.split('=')[1]);
    return result;
}, {});

但是,这里仍然存在一个回调。

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    为了避免回调使用_.partial_.partialRight和其他lodash方法来处理函数

    _.chain(rawUrl)
        .replace('?', '') // a=b454&c=dhjjh&f=g6hksdfjlksd
        .split('&') // ["a=b454","c=dhjjh","f=g6hksdfjlksd"]
        .map(_.partial(_.split, _, '=', 2)) // [["a","b454"],["c","dhjjh"],["f","g6hksdfjlksd"]]
        .fromPairs() // {"a":"b454","c":"dhjjh","f":"g6hksdfjlksd"}
        .value()
    

    【讨论】:

    • 很好的答案。谢谢!
    • 酷!将其与window.location.href 一起使用,我将其调整为_.chain(window.location.href).split('?').nth(1).split('&').map(_.partial(_.split, _, '=', 2)).fromPairs().value()
    • 这很有用。处理完整网址的一个调整是使用.replace(/^.+\?/, '') 而不是.replace('?', '')
    【解决方案2】:

    我知道您要求提供 lodash 解决方案,但也许阅读该问题的人可能还想查看 URLSearchParams,它帮助我使用比 ES6 方法更少的代码,并避免lodash。

    const params = new URLSearchParams(window.location.search);
    

    访问名为“a”的查询参数

    let a = params.get('a');
    

    https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams

    【讨论】:

      【解决方案3】:

      没有 lodash 的 Es6 方式:

        const urlParsed =
          rawUrl.substring(rawUrl.indexOf("?") + 1)
                .split("&")
                .reduce(
                  (memo, param) => ({
                    ...memo,
                    [param.split("=")[0]]: param.split("=")[1]
                  }),
                  {}
                );
      

      【讨论】:

        【解决方案4】:

        您也可以使用https://github.com/sindresorhus/query-string,而不是创建您自己的此功能版本。

        【讨论】:

          【解决方案5】:

          这是几年前的事了,但仍然想添加这个,因为任何人都会遇到,

          url
              .replace('?', '')
              .split('&')
              .reduce((a, n) => {
                  return { ...a, [n.split('=')[0]]: n.split('=')[1] };
              }, {});
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-01
            • 2014-05-02
            • 2021-05-07
            • 1970-01-01
            相关资源
            最近更新 更多