# url 解析和取参

url转对象:new URL('https://www.yuque.com/kylethanas/share/ccln9z')

获取当前url:document.URL

增加删除query参数

import qs from 'qs';
import { omit } from 'lodash';

interface QueryDict {
  [key: string]: any;
}

/**
 * 增加链接参数
 *
 * @param {string} href 原始链接
 * @param {string[]} keys 剔除字段
 * @return {string} 新链接
 */
export const injectQuery = (href: string, queries: QueryDict): string => {
  const current = document.createElement('a');
  current.href = href;

  const { pathname, origin, search } = current;
  const parsed = qs.parse(search, { ignoreQueryPrefix: true });
  const query = { ...parsed, ...queries };

  if (Object.keys(query).length === 0) {
    return `${origin}${pathname}`;
  }

  return `${origin}${pathname}?${qs.stringify(query)}`;
};

/**
 * 删除链接参数
 *
 * @param {string} href 原始链接
 * @param {string[]} keys 剔除字段
 * @return {string} 新链接
 */
export const omitQuery = (href: string, keys: string[]): string => {
  const current = document.createElement('a');
  current.href = href;

  const { pathname, origin, search } = current;
  const parsed = qs.parse(search, { ignoreQueryPrefix: true });
  const query = omit(parsed, keys);

  if (Object.keys(query).length === 0) {
    return `${origin}${pathname}`;
  }

  return `${origin}${pathname}?${qs.stringify(query)}`;
};