美文网首页
js优化项目常用小技巧

js优化项目常用小技巧

作者: 候鸟与暖风 | 来源:发表于2020-04-04 15:51 被阅读0次
1.等一个函数执行完之后,再执行另一个(es6中promise)
methods:{
    checkForm(){
         return new Promise((resolve,reject)=>{
              if(flag)  {
                resolve(66); //当满足条件后,才resolve
              } 
         })
     },
    submit(){
       this.checkForm().then(res=>{
        console.log(res)  //66
        })
    }
}

当有多个方法的时候,用以下的方法


let P1 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve("p1 data")
    }, 500)
})
 
let P2 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve("p2 data")
    }, 500)
})
 
Promise.all([P1, P2]).then(function (results) {
    console.log(results) // ["p1 data", ""p2 data""]
})
2.用三目运算符代替if else
var judge = 1;
  judege == 1 ? console.log(1) : console.log(0);

3.async 和await代替promise

methods:{
    checkForm(){
        return new Promise((resolve,reject)=>{
            console.log(2)
            resolve()
         })
     },
    async submit(){
        await this.checkForm()
        console.log(1)
    }
}

结果  先打印2,再打印1
//2
//1
4.Object.is 比较两个值是否相等

Object.is() 严格比较两个值是否相等,弥补== 和=== 的缺点

== 缺点
null == undefined   //true
+0 == -0     //true

=== 缺点
+0 === -0     //true
NaN === NaN   //false

Object.is   只要值一样,就相等
.is(+0,-0)  // false
Object.is(NaN,NaN) // true
5.数组深拷贝的几种方法

方法A

let arr = [1,2,3,4]
let b = JSON.parse(JSON.stringify(arr))
这样就能得到一个新的数组,而且即便修改数据b的值,也不会对数据arr有任何影响

方法B

let arr = [1,2,3,4]
let b = arr.slice(0)
6.点击分页,页面滑倒最顶部
 if (document.body.scrollTop) {
        document.body.scrollTop = 0
      } else {
        document.documentElement.scrollTop = 0
      }
7.将数据转化为树状结构的数据
export const toTree = function (data) {
    let result = []
    if (!Array.isArray(data)) {
        return result
    }
    data.forEach(item => {
        delete item.children;
    });
    let map = {};
    data.forEach(item => {
        map[item.id] = item;
    });
    data.forEach(item => {
        let parent = map[item.pid]; //这个可根据自己项目中父与子数据的关联进行修改
        if (parent) {
            (parent.children || (parent.children = [])).push(item);
        } else {
            result.push(item);
        }
    });
    return result;
}
8.循环对比数组数据,有这个值就直接返回ture

推荐

let  name="aa"
 let flag =  Array.some(item=>{
     return item.name ===name
})
如果数组中有这个值就返回true,没有就返回false

如下是之前的写法,out啦....

let flag = false 
for(let a = 0;a<Array.length;a++){
   if(Array.name===name){
      flag  =true
      break
  }
}
console.log(flag)

9.深拷贝

deepCopy(obj){        
    let newObj = null        
    if(typeof obj ==='object'&&obj !== null){                     
      newObj = obj instanceof Array?[]:{}            
      for(var i in obj){                
          newObj[i] = deepCopy(obj[i])             
      }        
    }else{            
         newObj = obj // 最终会走这一步        
     }        
         return newObj    
}

把数组或字符串按照长度分成新的数组

  chunk(array, size) {
      //获取数组的长度,如果你传入的不是数组,那么获取到的就是undefined
      const length = array.length
      //判断不是数组,或者size没有设置,size小于1,就返回空数组
      if (!length || !size || size < 1) {
        return []
      }
      //核心部分
      let index = 0 //用来表示切割元素的范围start
      let resIndex = 0 //用来递增表示输出数组的下标

      //根据length和size算出输出数组的长度,并且创建它。
      let result = new Array(Math.ceil(length / size))
      //进行循环
      while (index < length) {
        //循环过程中设置result[0]和result[1]的值。该值根据array.slice切割得到。
        result[resIndex++] = array.slice(index, (index += size))
      }
      //输出新数组
      return result
    },

10 计算两个时间之间的大小关系

Date.parse(date2) - Date.parse(date1) >= 0

11.base64编码转换成blob对象的方法

 // base64编码转换成blob对象的方法:
    function getBlobBydataURI(dataURI, type) {
      var binary = atob(dataURI.split(',')[1]);
      var array = [];
      for (var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
      }
      return new Blob([new Uint8Array(array)], { type: type });
    },

12.base64转化为file对象的方法

dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(',');
var mime = arr[0].match(/:(.*?);/)[1];
var bstr = atob(arr[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
//转换成file对象
return new File([u8arr], filename, {type:mime});

相关文章

  • js优化项目常用小技巧

    1.等一个函数执行完之后,再执行另一个(es6中promise) 当有多个方法的时候,用以下的方法 2.用三目运算...

  • Python-02进阶-07代码优化技巧

    代码优化技巧 优化原则 核心技巧 其他技巧 Python 代码性能优化技巧 常用代码优化技巧 sort()优于so...

  • 关于客户端JS性能优化(部分)

    下面是一些关于客户端JS性能的一些优化的小技巧: 1.关于JS的循环,循环是一种常用的流程控制。JS提供了三种循环...

  • Js 常用的优化技巧

    1. async 和 await 代替 promise (即异步改同步) 2. Object.is 比较两个值是否...

  • JS优化小技巧

    转载知乎:https://zhuanlan.zhihu.com/p/402817988[https://zhuan...

  • js常用小技巧

    1、form表单中的数据修改: var param = $("#form").serializeArray(); ...

  • JS 常用小技巧

    前言 JavaScript 是一门弱类型语言,其使用非常广泛。 这里我总结了自己日常使用中的 Tips ,不断更新...

  • js常用小技巧工具

    前端常用 工具方法 1.邮箱 2.手机号码 3.电话号码 4.是否url地址 5.是否字符串 6.是否数字 7.是...

  • 常用js简写小技巧

    字符串重复N次: repeat(ES2015) ps:需要给女朋友发100遍道歉的时候?嘿嘿…… 指数幂:**(E...

  • 微信小程序获取日期天数带星期

    在微信小程序或者web项目中经常用到需要获取当前时间往后多少天并显示日期含星期几的需求,现在优化为一个js函数,只...

网友评论

      本文标题:js优化项目常用小技巧

      本文链接:https://www.haomeiwen.com/subject/xlprictx.html