2020、2021、2022年常用总结

20 篇文章 0 订阅

一、常用的js函数总结

(1)判断一个对象是否为空对象Object.keys()

let a = {} ;
如果为空对象,那么Object.keys(a).length 的值 0;
所以判断是否为空直接判断Object.keys(a).length == 0

(2)判断一个元素是否在数组中
indexOf()、includes()

//indexOf()方法返回给定元素能找到数组中找到的第一个索引值,找不到则返回-1
let arr = ['1','2','3','4']
arr.indexOf('3'); //打印的结果是2
arr.indexOf('5');//打印的结果是-1
//includes()方法的,存在则为true,不存在则为false
arr.includes(1) //true
arr.includes(5) //false

(3)字符串和数组相互转化

//字符串转化为数组 split()韩式
let str= "1,2,3,4,5";
let array = str.split(",");
//数组转化为字符串join()
let arr = ['1','2','3','4','5'];
let str2 = arr.join(',');

(4)截取字符串函数slice(),substring()

str.substring(0,i); //取字符串的前i个字符
str.subString(i); //截取i前面的字符

(5)截取数组,并返回截取后的数组

let  list = ['1','2','3','4','5','6','7'];
let index = list.indexOf('4');//返回4在数组中的下标
list.splice(index, 1);//返回截取后的数组,结果是['1','2','3','5','6','7']

(6)shift、push、unshift、pop、splice、sort、reverse操作数组的用法:

var arr = ['a','b','c','d','e','f','g','h']
1、shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值
let item = arr.shift();
//item的值是a,arr数组的长度发生改变,此时已变为['b','c','d','e','f','g','h']
2、unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
let length =  arr.unshift('1','2');
//length的值是10,arr数组已变为['1','2','a','b','c','d','e','f','g','h']
3、push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
let len = arr.push('1','2','3');
//len的值是11,arr数组已变为['a','b','c','d','e','f','g','h','1','2','3'];
4、pop() 方法用于删除数组的最后一个元素并返回删除的元素。
let ele = arr.pop();
//ele的值是h,arr数组长度发生了改变,次数已经变为['a','b','c','d','e','f','g']
5、sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。默认排序顺序为按字母升序,参数看下图:。
let arr1 = [100,120,1,2,0];
let arr2 = ['a','s','b','e','c'];
//数字升序
arr1.sort(function(a,b){return a-b});//arr1已变为0,1,2,100,120
//数字降序
arr1.sort(function(a,b){return b-a});//arr1已变为120,100,2,1,0
//字母升序
arr2.sort()//arr2输入a,b,c,e,s
//字母降序,先对数组进行升序排列,在反转数组
arr2.sort();
arr2.reverse();//arr2输出s,e,c,b,a;
6、reverse() 方法用于颠倒数组中元素的顺序。
arr.reverse();
//arr的值变为['h','g','f','e','d','c','b','a']
7、splice() 方法用于添加或删除数组中的元素。
let arr3 = arr.splice(2,3);
//arr3输出的值是['c','d','e'],arr的值是['a','b','f','g','h'];

sort定义
在这里插入图片描述
(7)替换url链接中某个参数值

/**
 * 替换url的指定参数
 * @param {*} url 需要替换的url
 * @param {*} name 参数名称
 * @param {*} value 替换的值
 */
 function replaceQueryString (url, name, value) {
  const re = new RegExp(name + '=[^&]*', 'gi')
  return url.replace(re, name + '=' + value)
}

(8)js根据身份证号获取年龄、性别、出生年月

//获取出生年月
function getBirth(idCard){
    let  birthday = "";
    if(idCard){  
        birthday = idCard.slice(6,14);
        birthday = birthday.replace(/(.{4})(.{2})/,"$1-$2-");
    }   
    return birthday;
}
//获取性别
function getSex(idCard){
    let sex = '';
    if(idCard){
        if (parseInt(idCard.slice(-2, -1)) % 2 == 1) {
            sex = '男';
        }
        else {
            sex = '女';
        }
   }
   return sex;
}
//获取年龄
function getAge(idCard){
    let age = '';
    if(idCard){
        let currTime = new Date()
        let month = currTime.getMonth() + 1
        let day = currTime.getDate()
        age = currTime.getFullYear() - idCard.slice(6, 10) - 1;
        if (idCard.slice(10, 12) < month || idCard.slice(10, 12) === month && idCard.slice(12, 14) <= day) {
            age++
        }
        if (age <= 0) {
            age = 1
        }
    }
     return age;
}

(9)、hasOwnProperty函数用法

//hasOwnProperty这个方法会查找一个对象是否有某个属性,但是不会去查找它的原型链。
let obj = {
		id:'123',
  		name:'张三',
  		people:{
  		   userId:'123456'
  		}
	}
	console.log(obj.hasOwnProperty('id')); //true
	console.log(obj.hasOwnProperty('userId'));//false

(10)、将元素滚动到顶部、底部

//滚动到顶部
 document.getById('#id').scrollIntoView({ behavior: "smooth", block: "start" });
 //滚动到底部
 document.getById('#id').scrollIntoView({ behavior: "smooth", block: "end" });

(11)、检测手机主题的明暗

//检测是不是暗色主题
window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;

(12)、生成随机的颜色

let randomColor = `#${Math.floor(Math.random() * 0xffffff).toString(16)}`;

(13)、Array.from()
将一个类数组或者对象或者可遍历的对象转化为一个真正的数组。
接收的参数必须具备以下条件:
必须具有length属性,用于指定数组的长度,该参数的属性名必须为数值型或者字符串类型的数字。
使用:

//参数是字符串
let str = "qwertyu";
console.log(Array.from(str));
//['q','w','e','r','t','y','u'];
//参数是真的的数组,返回一个相同的数组
let arr = [1,2,3,4,5,6,7]; 
console.log(Array.from(arr));
//[1,2,3,4,5,6,7]

Array.from()还可以接收第二个参数,用于对每个元素进行处理

let arr = [1,2,3,4,5];
console.log(Array.from(arr,item=> item+1));
// [2, 3, 4, 5, 6]

(14)匹配空格正则

let str = 'a   b c '
 str.match(/\S+/g);
 //去除空格
 str.replace(/\S+/g,'');

(15) reduce()函数

reduce()是js数组对象上的一个高阶函数,可以用来迭代数组中的所有元素,并返回一个单一的值。
使用语法:array.reduce(callback, initialValue)
其中callback是一个回调函数,它接收四个参数:累加器(初始值或者上一次回调函数的返回值)、当前元素、当前索引、操作数组的本身。initialValue 是一个可选的初始值,如果提供了该值,则作为累加器的初始值,否则累加器的初始值为数组的第一个元素

用法示例:
计算数组的和

let arr = [0,1, 2, 3, 4, 5];
let sum = arr.reduce((acc, curr) => acc + curr);

扁平化处理多维数组

let arr = [[1, 2], [3, 4], [5, 6]];
let arr1 = arr.reduce((acc, curr) => acc.concat(curr), []);
console.log(arr1); // [1, 2, 3, 4, 5, 6]

(16) flat()函数
ES6新增的flat()函数可以用于处理扁平化处理多维数组,并返回新数组的能力。由于这个函数产生了一个全新的数组,所以不会改变原数组,flat() 函数返回的新数组将删除原始数组中存在的所有空值。
flat()函数仅采用一个参数,该参数可选,唯一的参数就是depth参数,如果原始数组包含一个或者多个嵌套数组结构,则此参数决定将多少数组层处理为单层,此参数默认值是1,可设置正深度、负深度(-Infinity)、无限深度(Infinity)、零深度(0)
例如:

//正深度
var arr1 = [1,2[3,4],[5,6],[[7,8]]];
var result1 = arr1.flat(1);
// result1: [1,2,3,4,5,6,[7,8]]
//无限深度
//如果在不知道数组有多少层的情况下,推荐使用
var arr2 = [[[1,2]],[[[[3,4],[]]]]]
var result2 = arr2.flat(Infinity);
//result2:[1,2,3,4]

二、vue常用总结
(1)、this.$set(obj,key,value)的用法

let vote = {}
this.$set( vote , 'name','小明');

这个主要用于我今天遇到的一个bug,在编辑时,我给一个输入框赋值了,但是在修改输入框的值时候,输入删除都没反应,当我点击了别的输入框就改变了,查找原因发现我打印的这一个属性没有set和get函数,所以不能进行双向绑定,用set赋值就完美的解决了。
(2)、使用input标签上传文件,触发input的点击事件
需要使用dispatchEvent()方法(dispatchEvent()方法可以用来广播事件):
语法如下所示:
dispatchEvent(eventObj),eventObj参数是一个描述事件的ActionScript对象。
广播事件的引用事件一般如下三种:
click事件、change事件、scroll事件
下面触发上传文件的代码如下所示:

 <div class="upload">
        <input type="file" ref="file" />
        <img src="../imgs/uoload@2x.png" alt="" class="photo-img" @click="triggerClick">
  </div>
  //triggerClick函数
   triggerClick(){
        this.$refs.file.dispatchEvent(new MouseEvent('click'))
     }

(3)在main.js里面设置公共的请求头,一般用于设置公共的图片地址的前缀

//1、可以直接定义一个baseUrl挂载到vue实例上面
const baseUrl = 'https://api.888time.cn/';
Vue.prototype.$baseUrl = baseUrl;//挂载到Vue实例上面
//2、可以引入其他页面的定义的公共地址
import baseUrl from './api/config.js'//引用文件
Vue.prototype.$baseUrl = baseUrl.baseUrl//挂载到Vue实例上面
//此时的baseUrl是定义在config.js里面的。例如:
const baseUrl = 'https://api.888time.cn/';
module.exports = {
	baseUrl: baseUrl,
}

(4)实现手写电子签名功能,使用组件vue-esign
使用方法主要查看官网:

vue-esign官网
(5)ios中时间显示NAN问题解决方案
ios直接使用Date()方法获得到的时间再苹果系统上显示NaN,安卓手机则是正常显示
原因是 Date() 内时间格式问题
解决方法是将时间中的’ -’ 字符替成 ‘/’ 字符 ,然后再对时间进行格式化展示

var vTime = "2019-01-01 00:00:00".replace(/\-/g, '/');
var vTime1 = new Date(vTime);

(6)watch监听器的使用

//监听data中的某个字符串:keyWord
 watch: {
    keyWord: function (val) {
      console.log(val);
    },
  },
  //监听data中某个对象的某个属性值的变化:query:{ keyWord:'' }
   watch:{
    "query.keyWord":{
      handler(val){
        if(!val){
           console.log(val)
        }
      }
    }
  }

(7)路由的方式新建一个导航栏打开新页面

 const { href } = this.$router.resolve({
     path: "路由地址",
     query: {},
  });
  window.open(href, '_blank');

(8)拨打电话

    //在index.html中加入
   <meta name="format-detection" content="telephone=yes" />
   在js文件中
   call () {
    		window.location.href = `tel:${Phone}`;
 		 	  // 或者:
			const a = document.createElement("a");
			a.href = `tel:${Phone}`;
			a.click();
   }
  
  

(9)列表自动滚动插件
vue-seamless-scroll
vue2版本的插件:git地址
支持Vue3的插件:git地址
(10)监听生命周期函数
父组件需要监听子组件的声明周期函数,进而触发某些操作时可以使用此方法; @hook

 <div>
     <!-- 可以监听created,mounted ...都可以 -->
   <Child @hook:mounted="doSomething"/>
 </div>

(11)vue-cropper 图片裁剪插件

具体使用查看官网:https://www.npmjs.com/package/vue-cropper

(12)移动端抽奖组件 NutUI-Bingo

官网地址:https://nutui.jd.com/bingo/?from=thosefree.com#/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值