常用的js整理
- 1. 设置按钮不能重复点击
- 2. 三元运算符替换if-else
- 3.改变对象中某一属性值
- 4.数组相关
- 字符串分割成数组
- 合并数组
- 去除重复元素
- 扩展运算符将字符串转为数组
- 判断对象中是否存在某个属性时,hasOwnProperty 是唯一可用的方法
- 数组对象根据字段去重
- 5.异步执行Promise的使用
- 6.浮点数快速向下取整
- 7.循环
- map 和 forEach
- reduce
- filter
- sort
- every
- find 和 findIndex
- 8.脱敏
- 手机号
- 身份证号
- 银行卡号
1. 设置按钮不能重复点击
<button class='btnlogin' bindtap="{{!canSubmit?'submit':''}}">提交</button>
canSubmit默认false
submit: function () {
this.setData({
canSubmit: true
})
//执行操作,操作结束后
this.setData({
canSubmit: false
})
}
2. 三元运算符替换if-else
this.type == 'add'? requsetAdd() : requestChange()
3.改变对象中某一属性值
var user = wx.getStorageSync('user');
user['teamType'] = data.teamType;
wx.setStorageSync('user', user);
this.setData({
info: data,
['info.teamProfile']: data.teamProfile,
})
4.数组相关
字符串分割成数组
var arr = data.split("、");
this.setData({
list: arr
})
合并数组
//使用扩展运算符(...)
var arr1 = [1, 2, 3, 4];
var arr2 = [...arr1, 5, 6, 7, 8];
console.log(arr2);
结果:
[1, 2, 3, 4, 5, 6, 7, 8]
去除重复元素
//使用扩展运算符
var arr1 = [1, 1, 2, 2, 3, 3, 3];
var arr2 = [...new Set(arr1)];
console.log(arr2);
结果:
[1, 2, 3]
//使用filter
var arr = [1, 1, 2, 2, 3, 3, 3];
var arrNew = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
console.log(arrNew);
结果:
[1, 2, 3]
//通过Set对象,对数组去重,结果又返回一个Set对象
//通过from方法,将Set对象转为数组
Array.from(new Set(arr))
扩展运算符将字符串转为数组
var str = "hello";
var strArr = [...'hello']
console.log(strArr)
结果:
[ "h", "e", "l", "l", "o" ]
判断对象中是否存在某个属性时,hasOwnProperty 是唯一可用的方法
for(var i in obj) {
if (obj.hasOwnProperty(i)) {
console.log(i, ':' + obj[i]);
}
}
数组对象根据字段去重
export const uniqueArrayObject = (arr, key) => {
if (arr.length === 0) return
let list = []
const map = {}
arr.forEach((item) => {
if (!map[item[key]]) {
map[item[key]] = item
}
})
list = Object.values(map)
return list
}
const arrList = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' },
{ id: 3, name: '王五' },
{ id: 1, name: '王五' },
{ id: 2, name: '张三' },
{ id: 3, name: '李四' },
{ id: 1, name: '李四' },
{ id: 2, name: '王五' },
{ id: 3, name: '张三' },
]
uniqueArrayObject(arrList, 'name')
// [{ id: 1, name: '张三' },{ id: 2, name: '李四' },{ id: 3, name: '王五' }]
5.异步执行Promise的使用
获取审核状态根据状态判断是否跳转完善信息
//获取审核状态
var getState = function () {
var app = getApp();
return new Promise(function (resolve, reject) {
wx.request({
url: app.globalData.url,
method: "POST",
success: function (res) {
console.log("审核状态", res)
if (res.data.success == true) {
var data = res.data.data;
resolve(data.platformAuditStatus);
} else {
resolve(0);
}
},
fail: function () {
reject(0);
}
})
})
}
//根据状态判断跳转还是继续执行
var judge = function (state) {
return new Promise(function (resolve) {
if (state != 1) {
wx.showToast({
title: '请完善个人信息',
icon: 'loading',
duration: 1500
})
setTimeout(function () {
wx.redirectTo({
url: '/pages/myMessage/myMessage',
})
}, 1000)
resolve(false);
} else {
resolve(true);
}
})
}
//验证是否已审核,否则跳去完善个人信息
function canNavigate() {
var isTrue = getState().then(res => {
judge(res).then(result => {
return result;
})
})
return isTrue;
}
if (utils.canNavigate()) {
//需要执行的操作
}
6.浮点数快速向下取整
(12.4 / 4.13) | 0
// => 3
~~(12.4 / 4.13)
// => 3
7.循环
【1】遍历对象用for…in(数组也可以用实际还是把数组当成对象去遍历)
【2】简单遍历数组用for或forEach或for of
【3】需要将数组按照某种规则映射为另一个数组就应该用map()
map 和 forEach
- forEach允许callback更改原始数组的元素,没有返回值。对于空数组是不会执行回调函数的。
使用场景: 并不改变数据,而只是想存入数据库或者打印出来。
var arr = [1, 2, 3, 4, 5];
var a=arr.forEach(function(value,index,arr){
value=value+7
})
console.log(a)
console.log(arr)
结果:
undefined
[1, 2, 3, 4, 5]
forEach()针对每一个元素执行提供的函数,对数据的操作会改变原数组。
var arr = [1, 2, 3, 4, 5];
var a=arr.forEach(function(value,index,arr){
arr[index] = value+7
})
console.log(a)
console.log(arr)
结果:
undefined
[8, 9, 10, 11, 12]
- map返回一个新数组,不会改变原数组。map() 不会对空数组进行检测。
使用场景: 要改变数据值,返回一个新数组的时候。
var arr = [1, 2, 3, 4, 5];
var a=arr.map(function(value,index,arr){
return value + 7
})
console.log(a)
console.log(arr)
结果:
[8, 9, 10, 11, 12]
[1, 2, 3, 4, 5]
forEach()和 map() 相同点:
(1)只能循环遍历数组,遍历对象报错forEach/map is not a function
(2)forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中当前项item,当前项的索引index,原始数组arr。
(3)匿名函数中的this都是指Window。forEach()和 map() 不同点:
(1)forEach() 没有返回值;map() 有返回值,可以return 出来。
reduce
这个函数必须接收两个参数,把结果继续和序列的下一个元素做累积计算
//比如对Array求和,就可以用reduce实现:
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
filter
“筛选”,把Array的某些元素过滤掉,然后返回剩下的元素
sort
“排序”,sort()方法默认把所有元素先转换为String再排序,不能直接对数字排序
[10, 20, 1, 2].sort(); //结果: [1, 10, 2, 20]
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
console.log(arr); // [1, 2, 10, 20]
//sort()方法直接对Array进行修改,它返回的结果仍是当前Array
var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同一对象
every
every()方法判断数组的所有元素是否满足测试条件。
var arr = ['Apple', 'pear', 'orange'];
console.log(arr.every(function (s) {
return s.length > 0;
})); // true, 因为每个元素都满足s.length>0
console.log(arr.every(function (s) {
return s.toLowerCase() === s;
})); // false, 因为不是每个元素都全部是小写
find 和 findIndex
find()方法用于查找符合条件的第一个元素,如果找到了,返回这个元素,否则,返回undefined
findIndex()方法用于查找符合条件的第一个元素,如果找到了,返回这个元素的索引,否则,返回-1
8.脱敏
手机号
export const hideMobile = (mobile) => {
//显示前3和后4
return mobile.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2")
}
身份证号
export const hideIdCard = (idCard) => {
//显示前6和后4
return idCard.replace(/^(.{6})(?:\d+)(.{4})$/, "$1******$2")
}
银行卡号
export const hideCard = (card) => {
//显示前4和后4
let str = ""
for (var i = 0; i < card - 8; i++) {
str += '*'
}
return card.replace(/^(.{4})(?:\d+)(.{4})$/, `$1${str}$2`)
}