使用lodash解析URL查询字符串

14

如何在不使用任何回调函数的情况下,仅使用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;
}, {});

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

5个回答

27

使用_.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()

非常好的回答。谢谢! - Myroslava Kozachuk
2
酷!使用 window.location.href 与此一起,我将其调整为 _.chain(window.location.href).split('?').nth(1).split('&').map(_.partial(_.split, _, '=', 2)).fromPairs().value() - A.W.
1
这很有用。处理完整URL的调整是使用.replace(/^.+\?/, '')而不是.replace('?', '') - Adam Skinner

20

我知道你要求使用lodash来解决问题,但是也许阅读这个问题的人也想看看URLSearchParams,它帮助我使用比ES6方法更少的代码,并避免使用lodash。

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

访问名为'a'的查询参数

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

https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams


3

3

不使用 lodash 的 ES6 方法:

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

0

这是几年前的事情了,但我仍然想为任何遇到这个问题的人添加这个信息。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接