【JS】js常用工具类:

这篇具有很好参考价值的文章主要介绍了【JS】js常用工具类:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、 将对象拼接到url地址后面
ObjConcatURL(obj) {
   if (!(typeof obj == 'object') || Object.keys(obj).length == 0) {
     return "";
   } else {
     // 过滤对象中为NaN,undefined的属性
    for (let key in obj) {
       if (obj.hasOwnProperty(key) && (obj[key] == null || obj[key] == undefined || obj[key] == NaN || obj[key] == '')) {
         delete obj[key]
       }
     }
     // 拼接字符串到url
     return obj ? '?' + Object.keys(obj).map(i => `${i}=${obj[i]}`).join('&') : "";
   }
},

【JS】js常用工具类:

二、正则获取url中的图片名称
// 下载
handleDownload(url) {
   if (!url) {
      this.$message.warning("链接不存在")
      return
   }
   let link = document.createElement('a')
   link.style.display = 'none'
   link.href = url

   // 正则获取url中的图片名称
   const reg = /[^/]+(?!.*\/)/g
   const imgName = url.match(reg).filter(item => item).pop()

   link.setAttribute('download', imgName)
   document.body.appendChild(link)
   link.click()
   document.body.removeChild(link) //下载完成移除元素
   window.URL.revokeObjectURL(url) //释放掉blob对象
}

【JS】js常用工具类:

三、获取多数组之间的差集
// 获取多数组之间的差集
arrayAminus(arrA, arrB, arrC) {
  return arrA.filter(v => !arrB.includes(v) && !arrC.includes(v));
},

【JS】js常用工具类:文章来源地址https://www.toymoban.com/news/detail-443463.html

四、数组遍历判断是否需要拼接地址
// 数组遍历判断是否需要拼接地址
pushArr(arr) {
  if (!Array.isArray(arr) || arr.length == 0) { return [] }
  let newArr = []
  arr.forEach(item => {
     if ((typeof item == 'object') && item.url) {
       item.url.includes("http") || item.url.includes(";base64,") ? newArr.push(item.url) : newArr.push(process.env.VUE_APP_FILE_URL + item.url)
     } else {
       item.includes("http") || item.includes(";base64,") ? newArr.push(item) : newArr.push(process.env.VUE_APP_FILE_URL + item)
     }
  })
return newArr
},
    
// 分类过滤
filterArrType(arr, type) {
   if (!Array.isArray(arr) || arr.length == 0) { return [] }
   let newArr = []
   arr.forEach(item => {
     if (type == "gross" && (item.includes("gross") || item.includes("First"))) { newArr.push(item) }
     else if (type == "tare" && (item.includes("tare") || item.includes("Second"))) { newArr.push(item) }
     else if (type == "chetou" && item.includes("chetou")) { newArr.push(item) }
     else if (type == "chewei" && item.includes("chewei")) { newArr.push(item) }
     else if (type == "chexiang" && item.includes("chexiang")) { newArr.push(item) }
     else if (type && item.includes(type)) { newArr.push(item) }
   })
  return newArr
},
五、 数组去重
// 数组去重
export function arrFilter(arr) {
	if (!Array.isArray(arr) && arr.length == 0) { return []; }
	return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
}
六、如果值不存在就 push 进数组, 反之不处理
/*
 * 如果值不存在就 push 进数组, 反之不处理
 * @param array 要操作的数据 
 * @param value 要添加的值 
 * @param key 可空, 如果比较的是对象, 可能存在地址不一样但值实际上是一样的情况, 可以传此字段判断对象中唯一的字段, 例如 id。 不传则直接比较实际值 
 * @returns { boolean } 成功 push 返回 true, 不处理返回 false 
 */
export function pushIfNotExist(array, value, key) {
	for (let item of array) {
		if (key && (item[key] === value[key])) {
			return false
		} else if (item === value) {
			return false
		}
	}
	array.push(value)
	return true
}
七、过滤对象中为NaN,undefined的属性
// 过滤对象中为NaN,undefined的属性
export function objFilter(obj, type) {
	if (!(typeof obj == 'object')) {
		return;
	}
	for (let key in obj) {
		if (obj.hasOwnProperty(key) && (obj[key] == null || obj[key] == undefined || obj[key] == NaN)) {
			console.log('---------过滤对象(null/undefined/NaN):' + key + ':' + obj[key] + '----------')
			if (type) {
				obj[key] == type;
			} else {
				delete obj[key];
			}
		}
	}
	return obj;
}
八、字符串中插入千位分隔符
// 字符串中插入千位分隔符
export function thousandsSeparator(num) {
	if (!(typeof num == 'number') || isNaN(num)) {
		return;
	}
	return (num + "").replace(/\d(?=(\d{3})+$)/g, "$&,")
}
九、保留小数位数
/**
 * 保留小数位数
 * @param {*} num 
 * @param {*} digit 需要保留小数位数(全部显示:则不传或传null)
 * @param {*} type 是否四舍五入(是:不传或传"四舍五入")
 * @returns 
 */
export function keepDecimal(num, digit, type) {
  if (!type || type == null || type == '四舍五入') {
    // 1.四舍五入
    var result = parseFloat(num);
    if (isNaN(result)) { return }
    return digit && digit != null ? Number(result.toFixed(digit)) : Number(result)
  } else {
    // 2.不四舍五入 向下取整
    var result = digit && digit != null ? Math.floor(num * Math.pow(10, digit)) / Math.pow(10, digit) : parseFloat(num);
    if (isNaN(result)) { return }
    return result
  }
}
十、根据参数搜索的数组对象里面其它元素
/**
 * @param {*} array 需要搜索的数组对象
 * @param {*} key   需要搜索的数组里的key
 * @param {*} value 需要查找的value
 * @param {*} element 要获取的元素
 * let arr=[{name:'123',id:10},{name:'1',id:2}];
 * console.log(findElement(arr, 10, 'id','name'))//==>表示根据id获取其name
 */
export function findElement(array, key, value, element) {
  if (!Array.isArray(array)) { return null }
  if (array.length == 0) { return null }
  let Obj = array.find(i => i[key] == value)
  return Obj && Obj[element] ? Obj[element] : null
}
十一、根据全部列表数组和选中的数组,根据key获取其它key的value数组
/**
 * @param {*} arrA  完整的列表数组
 * @param {*} arrB  选择展示的数组
 * @param {*} value 需要查找的value
 * @param {*} element 要获取的元素
 * let arrA=[{name:'123',id:10},{name:'1',id:2},...]; =['123''1'];
 * console.log(findElementArr(arrA , arrB ,  'name' , 'id'));  //==>表示根据name值获取其ids数组
 */
 
export function findElementArr(arrA, arrB, value, element) {
  if (!Array.isArray(arrA) || !Array.isArray(arrB)) { return [] }
  if (arrA.length == 0 || arrB.length == 0) { return [] }
  let arr = []
  for (let index = 0; index < arrA.length; index++) {
    const item = arrA[index];
    for (let i = 0; i < arrB.length; i++) {
      const obj = arrB[i];
      if (!(typeof obj == 'object')) {
        item[value] && item[element] && item[value] == obj ? arr.push(item[element]) : null
      } else {
        item[value] && item[element] && item[value] == obj[value] ? arr.push(item[element]) : null
      }
    }
  }
  return arr
}
十二、有新旧两个数组,获取删除和新增的元素
/**
 * 有新旧两个数组,获取删除和新增的元素
 * 【1】let beArr = [1, 2, 3, 4], afArr = [2, 3, 6];
 * console.log(compareArrays(beArr, afArr));
 * 
 * 【2】let oldArr = [{ id: "001", name: "赵大" },{ id: "002", name: "钱二" },{ id: "003", name: "孙三" },{ id: "004", name: "李四" }];
 *      let newArr = [{ id: "002", name: "钱二" },{ id: "003", name: "孙三" },{ id: "005", name: "周五" },{ id: "006", name: "吴六" }];
 * console.log(compareArrays(oldArr, newArr, 'id'))
 * 
 * return 返回一个对象里面包含后一个数组比第一个数组增加、减少的数据(适用于去重过后的数组)
 */
function compareArrays(beforeArr, afterArr, key) {
  let addArr = [], deleteArr = [];
  for (let i = 0; i < afterArr.length; i++) {  // 新增的内容
    const item = afterArr[i];
    if (key && beforeArr.filter((v) => v[key] == item[key]).length == 0) {
      addArr.push(item);
    } else if (!key && beforeArr.filter((v) => v == item).length == 0) {
      addArr.push(item);
    }
  }
  for (let i = 0; i < beforeArr.length; i++) {  // 删除的内容
    const item = beforeArr[i];
    if (key && afterArr.filter((v) => v[key] == item[key]).length == 0) {
      deleteArr.push(item);
    } else if (!key && afterArr.filter((v) => v == item).length == 0) {
      deleteArr.push(item);
    }
  }
  return { addArr: addArr, deleteArr: deleteArr };
}

到了这里,关于【JS】js常用工具类:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学和统计方向常用MATLAB工具箱下载地址

    1.数学和优化类 曲线拟合工具箱(Curve Fitting Toolbox) 功能:使用回归、插值和平滑对数据进行曲线和曲面拟合 下载地址:https://www.mathworks.com/products/curvefitting.html 优化工具箱(Optimization Toolbox) 功能:求解线性、二次、整数和非线性优化问题 下载地址:https://www.mathworks.com

    2024年02月08日
    浏览(52)
  • Elasticsearch的基础知识和架构设计,以及一些常用的功能——面向对象编程和数据结构的高级应用场景,以及相应的代码实现方法和工具

    作者:禅与计算机程序设计艺术 2019年,Elasticsearch正式发布了7.0版本。在这个版本更新中,新增了许多新特性和功能,包括全文搜索、分类聚合、分析器、图形化数据可视化等。无论对于企业或个人来说,都意味着更好的应用场景。但是,掌握Elasticsearch并非易事,需要不断学

    2024年02月07日
    浏览(57)
  • js 通过文件地址URL转为File文件对象

    通过文件地址URL,将所指文件转为File文件对象 文件url地址转为文件对象,代码如下(调用即可): 2.调用方式 代码如下(示例):

    2024年02月10日
    浏览(46)
  • JS中 Math 和 Number 内置对象常用的一些方法

    参数:num,一个需要求绝对值的数。 参数:num,需要进行上舍入的数值。 注意事项:对于负数进行上舍入时会出现一定的差错。 参数:num,需要进行下舍入的数值。 参数:num1, num2, …, numN,需要比较的数值,可以是任意个数的参数。 注意事项:如果传入的参数为空,返回

    2024年02月05日
    浏览(43)
  • JS语句中等某个方法执行完再执行后面逻辑

    在写script语句的时候,常遇到在代码逻辑中需要请求后台或别的运算方法执行完拿到结果再继续执行代码的场景。 解决 :简单举列子 此方法适用需要等待一到两个方法执行逻辑(嵌套)。 如果有多个,建议用 promise.all() 方法

    2024年02月11日
    浏览(42)
  • 分享20+个在线工具网站,60+常用工具

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 今天给大家分享20+在线工具网站和 60个常用在线工具+前端工具 欢迎大家访问:h

    2024年02月09日
    浏览(50)
  • IDEA常用工具&配置

    IDEA常用工具配置 如果发现插件市场用不了,可以设置Http Proxy,在该界面上点击”Check connection“并输入的地址:https://plugins.jetbrains.com/ 。 一、常用插件 1、MybatisX Mybaits Plus插件,支持java与xml互转 2、FindBugs-IDEA 检测代码中可能的bug及不规范的位置,写完代码后检测下 避免低

    2024年02月12日
    浏览(38)
  • 开发规范及常用工具

    entity : 是与数据库一一对应的字段 vo : 返回给前端的视图对象 dto : 前端传过来的参数封装成dto,用于返回给前端的对象,一般用于查询操作。 POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。 注意:数据库中拼接字段中间使用下划线(_)进行分割,而实体类中拼接字段采用的是驼峰映射

    2024年02月01日
    浏览(43)
  • 接口mock常用工具

    在进行测试时,我们经常需要模拟接口数据,尤其是在前后端分离项目的开发中,在后端未完成开发时,前端拿不到后端的数据,就需要对后端返回的数据进行模拟。 如下一些工具,可以完成接口的mock。 首先添加接口,并填写接口请求方式和路径,点击提交。    点击高级

    2024年02月13日
    浏览(40)
  • 产品经理常用工具汇总

    英文名称 中文名称 描述 Axure 原型 原型图,流程图,框架图,原型图; Axhub 团队原型共享 Axure原型团队共享,链接转发; iconfont 阿里矢量图标 图标下载,协助原型和方案; visio 流程图  业务流程图,泳道图编写; OBS 录屏 录屏工具 EV录屏 EV录屏 录屏工具 腾讯文档 腾讯文

    2024年04月24日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包