43、常用方法集合3---数组

60 阅读1分钟

11、数组对象去重

     * @method arrHeavy() 数组对象去重
     * @param sourceArr 原数组
     * @param keyArray 所要以什么字段为参考的数组
     */
    arrHeavy: (sourceArr, keyArray) => {
        let obj = {}
        let arr = []
        sourceArr.forEach((d) => {
            let str = ''
            keyArray.forEach((key) => {
                str += d[key] || d[key] === 0 ? d[key] + '$' : ''
            })
            if (!obj[str]) {
                arr.push(d)
                obj[str] = 1
            }
        })
        return arr
    },

12、从数组对象中获取某个属性,组成新的数组

 /**
     * @method getCodeFromArr() 从数组对象中获取某个属性,组成新的数组
     * @param {Array} sourceArr 数组对象
     * @param {Array} attr 希望从arr中获取的属性
     */
    getCodeFromArr: (sourceArr, attr) => {
        let arr = []
        sourceArr.forEach((item) => {
            let param = {}
            attr.forEach((key) => {
                param[key] = item[key]
            })
            arr.push(param)
        })
        return arr
    },

13、copyText() 将文案复制到黏贴板

/**
     * copyText() 将文案复制到黏贴板
     * @param {String} text 要复制的文案
     */
    copyText(text) {
        const input = document.createElement('input')
        input.style.position = 'absolute'
        input.style.zIndex = -10
        document.body.appendChild(input)
        input.setAttribute('value', text)
        input.select()
        document.execCommand('copy')
        document.body.removeChild(input)
    },

14、多出部分加...

 /**
     * @method  subStr 多出部分加...
     * @param str 需要转化的字符串
     * @param n 需要显示的字符长度
     */
     subStr(str, n) {
        if (str) {
            let r = /[^\x00-\xff]/g;
            if (str.replace(r, "mm").length <= n) { return str }
            let m = Math.floor(n / 2);
            for (let i = m; i < str.length; i++) {
                if (str.substr(0, i).replace(r, "mm").length >= n) {
                    return str.substr(0, i) + "...";
                }
            }
        }
        return str;
    },
    /**
     * @method formatData 多出部分加...
     * @param text 需要转化的字符串
     * @param len 需要显示的字符长度
     */
    formatData(text, len = 10) {
        let str = text
        if (str && str.length > len) {
            str = str.substring(0, len) + '...'
        }
        return str
    },

15、每隔n个字符加入操作符

    /**
     * @method nReplace 每隔n个字符加入操作符
     * @param text 需要转化的字符串
     * @param len 字符串的长度
     * @param op 操作符'\n'等
     */
    nReplace(text, len, op = '\n') {
        let str = text
        let re = new RegExp(`(.{${len}})`, 'g')
        if (str && str.length > len) {
            str = str.replace(re, `$1${op}`)
        }
        return str
    },

16、简单数据转化成ztree数据

    /**
     * @method simpleToArray 简单数据转化成ztree数据
     * @param params simple设置
     ***/
    simpleToArray(sNodes, params = {}) {
        var i, l,
            key = params.idKey || 'id',
            val = 'value',
            kk = 'key',
            title = 'title',
            name = params.nameKey || 'name',
            parentKey = params.parentKey || 'pId',
            childKey = 'children'
        if (!key || !sNodes) return [];
        if (Object.prototype.toString.apply(sNodes) === "[object Array]") {
            var r = [];
            var tmpMap = {};
            for (i = 0, l = sNodes.length; i < l; i++) {
                tmpMap[sNodes[i][key]] = sNodes[i];
                sNodes[i][kk] = sNodes[i][val] = sNodes[i][key]
                sNodes[i][title] = sNodes[i][name]
            }
            for (i = 0, l = sNodes.length; i < l; i++) {
                if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] !== sNodes[i][parentKey]) {
                    if (!tmpMap[sNodes[i][parentKey]][childKey])
                        tmpMap[sNodes[i][parentKey]][childKey] = []
                    tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i])
                } else {
                    r.push(sNodes[i])
                }
            }
            return r
        }
        return [sNodes]
    },

17、组织树数据格式化

// 组织树数据格式化
    transformData(tree) {
        let arr = [];
        if (!!tree && tree.length !== 0) {
            tree.forEach(item => {
                let obj = {};
                obj.title = item.name;
                obj.key = item.id;
                obj.value = item.id;
                obj.checked = item.checked;
                obj.children = this.transformData(item.children); // 递归调用
                arr.push(obj);
            });
        }
        return arr;
    },

18、导出

/**
     * @method saveFile() 导出
     * @param {base64} data 导出的数据,待转
     * @param {String} fileName 名称
     * @param type 保存的文件类型,目前只有excel和zip
     */
    saveFile(data, fileName, type = 'excel') {
        const ZIP = 'application/zip;charset=utf-8'
        const EXCEL = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
        let terminalType = ''
        if (type === 'excel') {
            terminalType = EXCEL
        } else if (type === 'zip') {
            terminalType = ZIP
        }
        var blob = ''
        if (typeof (data) === 'string') {
            let code = atob(data.replace(/\r\n/g, ''))
            var abuffer = new window.ArrayBuffer(code.length)
            var uBuffer = new window.Uint8Array(abuffer)
            for (var i = 0; i < code.length; i++) {
                uBuffer[i] = code.charCodeAt(i) & 0xff
            }
            blob = new Blob([uBuffer], {
                type: terminalType
            })
        } else {
            blob = new Blob([data], {
                type: terminalType
            })
        }
        if (window.navigator.msSaveOrOpenBlob) {
            // iE下使用msSaveBlob进行导出
            navigator.msSaveBlob(blob, fileName)
        } else {
            var href = window.URL.createObjectURL(blob)
            var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a')
            save_link.href = href
            save_link.download = fileName
            // 解决火狐兼容问题
            document.body.appendChild(save_link)
            var event = document.createEvent('MouseEvents')
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
            save_link.dispatchEvent(event)
            document.body.removeChild(save_link)
            window.URL.revokeObjectURL(href)
        }
    },