js經常使用擴展方法

在平常的開發過程當中,常常會碰到javaScript原生對象方法不夠用的狀況,因此常常會對javaScript原生方法進行擴展。下面就是在實際工做時,常常使用的一些方法,作一下記錄,有須要的能夠拿去。

一、String篇

1.一、字符串作相加運算:

浮點數的精度問題是javaScript計算的一個障礙,由於有些小數以二進制表示的話位數是無窮的。好比1.1,在程序中沒法真正的表示1.1,只能作到必定程度的準確,可是沒法避免精度的丟失。java

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.二、字符串作相減運算

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()
}
複製代碼

二、Number篇

2.一、數字作相加運算

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.二、數字作相減運算

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
}
複製代碼

三、Array數組篇

3.一、獲取數組最大值

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

3.二、獲取數組的深拷貝值

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

3.三、使用特殊字符(symbol)替換數組中的0

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

3.四、獲取數組中指定 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.五、獲取數組中由自定義數量的隨機元素組成的新數組。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.六、獲取數組中的隨機元素

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

3.七、數組內元素求加和

Array.prototype.sum = function () {
    return eval(this.join('+'))
}
複製代碼
相關文章
相關標籤/搜索