开发项目常用的一些工具函数

210 阅读2分钟

1.从URL中解析参数

/**
 * @param {String} url
 * @description 从URL中解析参数
 */
export const getParams = url => {
  const keyValueArr = url.split('?')[1].split('&')
  let paramObj = {}
  keyValueArr.forEach(item => {
    const keyValue = item.split('=')
    paramObj[keyValue[0]] = keyValue[1]
  })
  return paramObj
}

2.树形结构,根据id 查找 data中的某一项

export const getChidlren = (id, data) => {
  let hasFound = false, // 表示是否有找到id值
    result = null;
  let fn = function (data) {
    if (Array.isArray(data) && !hasFound) { // 判断是否是数组并且没有的情况下,
      data.forEach(item => {
        if (item.id === id) { // 数据循环每个子项,并且判断子项下边是否有id值
          result = item; // 返回的结果等于每一项
          hasFound = true; // 并且找到id值
        } else if (item.children) {
          fn(item.children); // 递归调用下边的子项
        }
      })
    }
  }
  fn(data); // 调用一下
  return result;
}

3.树形结构,根据id查找当前节点以及所有父节点

/**
 * @description 根据id查找当前节点以及所有父节点
 * @param {Object} json 需要遍历的JSON对象
 * @param {String} child 需要查找的节点名称
 * @param {Any} id 需要查找的节点名称对应的值
 */
export const getParentNodeAll = (json, child, id) => {
  let stack = [];
  let going = true;
  let walker = (json, id) => {
    json.forEach(item => {
      if (!going) return;
      stack.push(item[child]);
      if (item[child] === id) {
        going = false;
      } else if (item['children']) {
        walker(item['children'], id);
      } else {
        stack.pop();
      }
    });
    if (going) stack.pop();
  }
  walker(json, id);
  return stack;
}

4.导出文件

/** *
 * @description 下载文件
 * @param {Blob} blob 文件流
 * @param {String} filename 文件名
 */
export const fileDownload = (blob, filename) => {
  if (window.navigator && window.navigator.msSaveBlob) {
    window.navigator.msSaveBlob(blob, filename); //兼容ie
  } else {
    const downloadElement = document.createElement('a');
    const href = window.URL.createObjectURL(blob);
    downloadElement.href = href;
    downloadElement.download = filename;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    window.URL.revokeObjectURL(href);
  }
};

5.文件大小 字节转换单位

/**
 * 文件大小 字节转换单位
 * @param size
 * @returns {string|*}
 */
export const filterSize = (fileSize) => {
  console.log(fileSize)
  if (fileSize < 1024) {
    return fileSize + 'B';
  } else if (fileSize < (1024 * 1024)) {
    var temp = fileSize / 1024;
    temp = temp.toFixed(2);
    return temp + 'KB';
  } else if (fileSize < (1024 * 1024 * 1024)) {
    var temp = fileSize / (1024 * 1024);
    temp = temp.toFixed(2);
    return temp + 'MB';
  } else {
    var temp = fileSize / (1024 * 1024 * 1024);
    temp = temp.toFixed(2);
    return temp + 'GB';
  }
}

6.获取本地图片的文件信息

export function getImageFileFromUrl(url, imageName) {
  // imageName一定要带上后缀
  let p = new Promise((resolve, reject) => {
    var blob = null;
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url);
    xhr.setRequestHeader('Accept', 'image/jpeg');
    xhr.responseType = "blob";
    xhr.onload = () => {
      blob = xhr.response;
      let imgFile = new File([blob], imageName, {type: 'image/jpeg'});
      resolve(imgFile);
    };
    xhr.send();
  });
  return p;
}

7.当前浏览器名称

/**
 * @returns {String} 当前浏览器名称
 */
export const getExplorer = () => {
  const ua = window.navigator.userAgent
  const isExplorer = (exp) => {
    return ua.indexOf(exp) > -1
  }
  if (isExplorer('MSIE')) return 'IE'
  else if (isExplorer('Firefox')) return 'Firefox'
  else if (isExplorer('Chrome')) return 'Chrome'
  else if (isExplorer('Opera')) return 'Opera'
  else if (isExplorer('Safari')) return 'Safari'
}

8.累加合(兼容浮点数累加)

/**
 * @param {Array} number
 * @return 累加合(兼容浮点数累加)
 */
export function totalizer(arr) {
  const accAdd = (arg1, arg2) => {
    let r1;
    let r2;
    try {
      r1 = arg1.toString().split('.')[1].length;
    } catch (e) {
      r1 = 0;
    }
    try {
      r2 = arg2.toString().split('.')[1].length;
    } catch (e) {
      r2 = 0;
    }
    const m = 10 ** Math.max(r1, r2);
    return (arg1 * m + arg2 * m) / m;
  };
  return arr.reduce((pre, cur) => accAdd(pre, cur), 0);
}

9.根据汉字首字母排序

let arr = ["贵州省", "江苏省", "江西省", "浙江省", "四川省", "安徽省", "山东省", "上海", "湖北省", "福建省", "辽宁省", "山西省", "河北省", "青海省",

"黑龙江省", "内蒙古自治区", "北京", "河南省", "湖南省", "广东省", "陕西省", "吉林省", "云南省", "新疆维吾尔自治区",

"重庆", "天津", "甘肃省", "宁夏回族自治区", "海南省", "广西壮族自治区", "西藏自治区"];

let sortArray = arr.sort(function (str1, str2) {
  return str1.localeCompare(str2, 'zh');
});