在日常的开发过程中,经常会碰到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. printcap - 打印机相容性数据库

    总览 SYNOPSIS printcap 描述 DESCRIPTION Printcap 是 termcap(5) 的簡單版, 用來描述 line printers. 當用到 spool 系統時, 一 ...

  2. [SDOI2017]数字表格 (莫比乌斯反演)

    链接:https://ac.nowcoder.com/acm/problem/20391来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...

  3. vue-如何输出Hello world

    首先引入vue.js文件 <script src="vue.js"></script> <!DOCTYPE html> <html> ...

  4. NotePad++安装 html.css.js智能提示【转】

    https://www.cnblogs.com/alirong/archive/2012/04/12/2443971.html

  5. better-scroll 的使用

    1.安装 cnpm install better-scroll --save 2.引入 import BScroll from "better-scroll"; 3.初始化 dat ...

  6. H2database创建表

    语法和sql server大同小异 create table users(id int primary key not null int identity, name varchar(20))

  7. BZOJ4386 [POI2015]Wycieczki 矩阵+倍增

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4386 题解 一眼就可以看出来是邻接矩阵快速幂. 可是这里的边权不为 \(1\).不过可以发现, ...

  8. centos 6.5 查看发行版本

    cat /etc/redhat-release 其他发行版 lsb_release -a

  9. ISO C 字符串创建算符 “#”

    使用用途: #define doit(name) pr_limits(#name, name) doit(RLIMIT_CORE); 这将由C预处理程序扩展为: pr_limits("RLI ...

  10. 前端this相关

    前端this相关: <script> //示例一 function func1() { console.log(this); //this代指window } func1(); //win ...