在日常的开发过程中,经常会碰到javaScript原生对象方法不够用的情况,所以经常会对javaScript原生方法进行扩展。下面就是在实际工作时,经常使用的一些方法,做一下记录,有需要的可以拿去。

1、String篇

1.1、字符串做相加运算:

浮点数的精度问题是javaScript计算的一个障碍,因为有些小数以二进制表示的话位数是无穷的。比如1.1,在程序中无法真正的表示1.1,只能做到一定程度的准确,但是无法避免精度的丢失。

String.prototype.add = function (arg2) {
let r1, r2, m
try {
r1 = this.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
} m = Math.pow(10, Math.max(r1, r2))
return (Math.round(this * m + arg2 * m) / m).toString()
}

1.2、字符串做相减运算

String.prototype.reduce = function (arg2) {
let r1, r2, m
try {
r1 = this.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return (Math.round(this * m - arg2 * m) / m).toString()
}

2、Number篇

2.1、数字做相加运算

Number.prototype.add = function (arg2) {
let r1, r2, m
try {
r1 = this.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
} m = Math.pow(10, Math.max(r1, r2))
return Math.round(this * m + arg2 * m) / m
}

2.2、数字做相减运算

Number.prototype.reduce = function (arg2) {
let r1, r2, m
try {
r1 = this.toString().split('.')[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (e) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return Math.round(this * m - arg2 * m) / m
}

3、Array数组篇

3.1、获取数组最大值

Array.prototype.getMax = function () {
return Math.max.apply(null, this.map((seg) => {return +seg}))
}

3.2、获取数组的深拷贝值

Array.prototype.getCopy = function () {
let that = this
return JSON.parse(JSON.stringify(that))
}

3.3、使用特殊字符(symbol)替换数组中的0

Array.prototype.replaceZero = function (symbol = '-') {
return this.map(function (seg) {
return +seg == 0 ? symbol : seg
})
}

3.4、获取数组中指定 idx 的元素,其中 idx 若超过数组长度length,则查找 idx 与 length * n 相减的序号元素

Array.prototype.getItemByIdx = function (idx = 0) {
function getArrByIdx (list, idx) {
if (list.length - 1 < idx) {
idx -= list.length
return getArrByIdx(list, idx)
} else {
return list[idx]
}
}
return getArrByIdx(this, idx)
}

3.5、获取数组中由自定义数量的随机元素组成的新数组。count 为所需数量

Array.prototype.getRandomArrayElements = function (count) {
var shuffled = this.slice(0),
i = this.length,
min = i - count,
temp, index
while (i-- > min) {
index = Math.floor((i + 1) * Math.random())
temp = shuffled[index]
shuffled[index] = shuffled[i]
shuffled[i] = temp
}
return shuffled.slice(min)
}

3.6、获取数组中的随机元素

Array.prototype.getRandomElement = function () {
let lth = this.length - 0.1
return this[Math.floor(Math.random() * lth)]
}

3.7、数组内元素求加和

Array.prototype.sum = function () {
return eval(this.join('+'))
}

最近在搞一个和前端程序员相关的公号,除了技术分享之外,也增加了对于职业发展、生活记录之类的文章,欢迎大家关注,一起聊天、吐槽,一起努力工作,认真生活!

js常用扩展方法的更多相关文章

  1. WebAPi添加常用扩展方法及思维发散

    前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...

  2. JS常用校验方法(判断输入框是否为空,数字,电话,邮件,四舍五入等)

    JS常用校验方法: 1.判断输入框是否为空,为空时弹出提示框 2.关闭窗口 3.检查输入字符串是否为数字 4.强制把大写转换成小写 5.手机号码校验,长度为11位数字. 6.电子邮件校验 7.电话号码 ...

  3. 【js常用DOM方法】

    介绍几个js DOM的常用方法 获取元素节点 getElementById  getElementsByTagName  getElementsByClassName 先写一个简单的网页做测试: /* ...

  4. JS常用公共方法封装

    _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||/ ...

  5. 常用的js对象扩展方法

    1. 字符串的replaceAll String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { if (!R ...

  6. JS常用属性方法大全

    1. 输出语句 : document.write(""); 2.JS 中的注释为 : // 3. 传统的 HTML 文档顺序是 : document->html->(h ...

  7. js常用API方法

    String对象常用的API:API指应用程序编程接口,实际上就是一些提前预设好的方法. charAt() 方法可返回指定位置的字符. stringObject.charAt(index) index ...

  8. js常用通用方法

    验证身份证详细方法 function isCardNo(pId) { var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2] ...

  9. Javascript 常用扩展方法

    这篇文章纯粹是为了保存这些方法,供以后翻阅,其实一直保存在 evernote 里面,但觉得还是放到对的地方会好点. 现在收录的很少,希望以后会慢慢增多. 数组扩展 contains,remove 扩展 ...

随机推荐

  1. 4——class和struct

    class的定义看上去很像struct定义的扩展, 事实上,类定义时的关键字class完全可以替换成struct,也就是说,结构体变量也可以有成员函数. class和struct的唯一区别在于:str ...

  2. Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...(转)

    对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了. 下面分为GET.POST.DELETE还有PUT的请求,说明@Path.@Query.@QueryMap.@Bo ...

  3. spring cloud学习笔记三 Feign与Ribbon负载均衡的区别

    一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...

  4. mysql,分组后,再次进行过滤

    查出平均分大于80以上的班级 select class_id, avg(score) from students group by class_id having avg(score)>80;  ...

  5. element-ui中使用el-radio单选切换表格

    应用场景:点击单选,切换表格数据 代码: data里的数据:(这里的值是默认选中的   和label值是对应的) change事件操作切换,这里面添加@click事件是不生效的,注意...

  6. maven插件之maven-surefire-plugin,junit单元测试报告和sonar测试覆盖率的整合说明

    POM中配置的如下: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> ...

  7. linux学习-常用文本处理命令

    1.文本处理命令 (1) tr 转换或删除字符 tr [OPTION]...SET1 SET2 选项: -c 取SET1字符串的补集 -d 删除属于SET1中的字符 -s 把连续重复出现的字符以单独一 ...

  8. vue之条件语句小结

    vue之条件语句小结 v-if, v-else 随机生成一个数字,判断是否大于0.5,然后输出对应信息: <!DOCTYPE html> <html> <head> ...

  9. iview+vue 使用中遇到的问题(分页)

    1.分页默认页数 当页面只有一个功能需要分页组件时,引用iview分页组件当然没问题.当一个页面中有多个需要分页组件的时候,便容易出现问题.例如:在项目中有多个不同的表格需要分页功能,几个表格共用一个 ...

  10. Linux 通配符和特殊符号