你可能会用到的JS工具函数(第二期)

Irene181
• 阅读 1879

你可能会用到的JS工具函数(第二期)

Vue3在script标签中引入

 const oDiv = document.createElement('div');  
    const oScript = document.createElement('script');  
    oDiv.setAttribute('id', 'app');  
    oScript.type = 'text/javascript';  
    oScript.src = "https://unpkg.com/vue@next";  
    document.body.appendChild(oDiv);  
    document.body.appendChild(oScript);  


    window.onload = function () {  
      const { createApp,ref } = Vue;  
      const App = {  
        template: `  
            <div>{{msg}}</div>  
            <p>{{count}}</p>  
            `,  
        data(){  
              return {  
                msg:'maomin'  
              }  
        },  
        setup(){  
          let count = ref(0);  

          return {  
            count  
          }  
        }  
    }  
     createApp(App).mount('#app');  
    }

递归寻找操作(已删除指定项为例)

 // 递归寻找  
    recursion(data, id) {  
      let result;  
      if (!data) {  
        return;  
      }  
      for (let i = 0; i < data.length; i++) {  
        let item = data[i];  
        if (item.breakerId === id) {  
          result = item;  
          data.splice(i, 1);  
          break;  
        } else if (item.childrenBranch && item.childrenBranch.length > 0) {  
          result = this.recursion(item.childrenBranch, id);  
          if (result) {  
            return result;  
          }  
        }  
      }  

      return result;  
    },

递归数组,将数组为空设为undefined

 function useTree(data) {  
        for (let index = 0; index < data.length; index++) {  
          const element = data[index];  
          if (element.childrenBranch.length < 1) {  
            element.childrenBranch = undefined;  
          } else {  
            useTree(element.childrenBranch);  
          }  
        }  
        return data;  
      }

数组对象中相同属性值的个数

 group(arr) {  
      var obj = {};  
      if (Array.isArray(arr)) {  
        for (var i = 0; i < arr.length; ++i) {  
          var isNew = arr[i].isNew;  
          if (isNew in obj) obj[isNew].push(arr[i]);  
          else obj[isNew] = [arr[i]];  
        }  
      }  
      return obj;  
    },  
    max(obj) {  
      var ret = 0;  
      if (obj && typeof obj === "object") {  
        for (var key in obj) {  
          var length = obj[key].length;  
          if (length > ret) ret = length;  
        }  
      }  
      return ret;  
    },  
var data = [  
    {  
     addr: "1",  
     isNew: false,  
    },  
    {  
     addr: "2",  
     isNew: false,  
    }  
]  
max(group(data) // 2

检测版本是vue3

import { h } from 'vue';  
const isVue3 = typeof h === 'function';  
console.log(isVue3)  

检测数据对象中是否有空对象

let arr = [{},{name:'1'}]  
const arr = this.bannerList.filter(item =>  
       item == null || item == '' || JSON.stringify(item) == '{}'  
);  
 console.log(arr.length > 0 ? '不通过' : '通过')  

深拷贝

 /* @param {*} obj  
 * @param {Array<Object>} cache  
 * @return {*}  
 */  
function deepCopy (obj, cache = []) {  
  // just return if obj is immutable value  
  if (obj === null || typeof obj !== 'object') {  
    return obj  
  }  

  // if obj is hit, it is in circular structure  
  const hit = find(cache, c => c.original === obj)  
  if (hit) {  
    return hit.copy  
  }  

  const copy = Array.isArray(obj) ? [] : {}  
  // put the copy into cache at first  
  // because we want to refer it in recursive deepCopy  
  cache.push({  
    original: obj,  
    copy  
  })  

  Object.keys(obj).forEach(key => {  
    copy[key] = deepCopy(obj[key], cache)  
  })  

  return copy  
}  

const objs = {  
    name:'maomin',  
    age:'17'  
}  

console.log(deepCopy(objs));

h5文字转语音

speech(txt){  
    var synth = null;  
    var msg = null;  
    synth = window.speechSynthesis;  
    msg = new SpeechSynthesisUtterance();  
    msg.text = txt;  
    msg.lang = "zh-CN";  
    synth.speak(msg);  
    if(window.speechSynthesis.speaking){  
      console.log("音效有效");  
     } else {  
     console.log("音效失效");  
     }  
 }  

模糊搜索

 recursion(data, name) {  
            let result;  
            if (!data) {  
                return;  
            }  
            for (var i = 0; i < data.length; i++) {  
                let item = data[i];  
                if (item.name.toLowerCase().indexOf(name) > -1) {  
                    result = item;  
                    break;  
                } else if (item.children && item.children.length > 0) {  
                    result = this.recursion(item.children, name);  
                    if (result) {  
                        return result;  
                    }  
                }  
            }  
            return result;  
        },  
        onSearch(v) {  
            if (v) {  
                if (!this.recursion(this.subtable, v)) {  
                    this.$message({  
                        type: 'error',  
                        message: '搜索不到',  
                    });  
                } else {  
                    this.tableData = [this.recursion(this.subtable, v)];  
                }  
            }  
        },

input 数字类型

 <el-input  
                        v-model.number="form.redVal"  
                        type="number"  
                        @keydown.native="channelInputLimit"  
                        placeholder="请输入阈值设定"  
                        maxlength="8"  
     ></el-input>  

        channelInputLimit(e) {  
            let key = e.key;  
            // 不允许输入‘e‘和‘.‘  
            if (key === 'e' || key === '.') {  
                e.returnValue = false;  
                return false;  
            }  
            return true;  
        },

排序(交换位置)

 const list = [1,2,3,4,5,6];  
    function useChangeSort (arr,oldIndex,newIndex){  
        const targetRow = arr.splice(oldIndex, 1)[0];  
        const targetRow1 = arr.splice(newIndex, 1)[0];  
        arr.splice(newIndex, 0, targetRow);  
        arr.splice(oldIndex, 0, targetRow1);  
        return arr  
    }  
    console.log(useChangeSort(list,5,0)); // [6, 2, 3, 4, 5, 1]

格式化时间

/**  
 * Parse the time to string  
 * @param {(Object|string|number)} time  
 * @param {string} cFormat  
 * @returns {string | null}  
 */  
export function parseTime(time, cFormat) {  
    if (arguments.length === 0 || !time) {  
        return null;  
    }  
    const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}';  
    let date;  
    if (typeof time === 'object') {  
        date = time;  
    } else {  
        if (typeof time === 'string') {  
            if (/^[0-9]+$/.test(time)) {  
                // support "1548221490638"  
                time = parseInt(time);  
            } else {  
                // support safari  
                // https://stackoverflow.com/questions/4310953/invalid-date-in-safari  
                time = time.replace(new RegExp(/-/gm), '/');  
            }  
        }  

        if (typeof time === 'number' && time.toString().length === 10) {  
            time = time * 1000;  
        }  
        date = new Date(time);  
    }  
    const formatObj = {  
        y: date.getFullYear(),  
        m: date.getMonth() + 1,  
        d: date.getDate(),  
        h: date.getHours(),  
        i: date.getMinutes(),  
        s: date.getSeconds(),  
        a: date.getDay()  
    };  
    const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {  
        const value = formatObj[key];  
        // Note: getDay() returns 0 on Sunday  
        if (key === 'a') {  
            return ['日', '一', '二', '三', '四', '五', '六'][value];  
        }  
        return value.toString().padStart(2, '0');  
    });  
    return time_str;  
}  

不断更新...

我创建了一个技术交流、文章分享群,群里有很多大厂的前端大佬,关注公众号后,点击下方菜单了解更多即可加我微信,期待你的加入。

你可能会用到的JS工具函数(第二期)

本文转自 https://mp.weixin.qq.com/s/1VC3uZAjH0kM-zbPDWkh1Q,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这