Skip to content

JavaScript常用数据处理方法

1、手机号、证件号隐藏中间某几位

javascript
// str字符串变量   start开始第几位之后替换  end第几位结束   middle中间替换的内容
forMate(str, start, end, middle) {
	if (start < end) {
		var len = Math.abs(start - end);
		var text = "";
		for (var i = 0; i < len; i++) {
			text += middle;
		}
		return str.substring(0, start) + text + str.substring(end);
	}
	return false;
}
//forMate("12345678901",3,7,"*");						//123****8901
//forMate("12345619990927542X",6,14,"*");				//410381********542X
// str字符串变量   start开始第几位之后替换  end第几位结束   middle中间替换的内容
forMate(str, start, end, middle) {
	if (start < end) {
		var len = Math.abs(start - end);
		var text = "";
		for (var i = 0; i < len; i++) {
			text += middle;
		}
		return str.substring(0, start) + text + str.substring(end);
	}
	return false;
}
//forMate("12345678901",3,7,"*");						//123****8901
//forMate("12345619990927542X",6,14,"*");				//410381********542X

2、防抖

TIP

1、登录、发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖;
2、调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖;
3、文本编辑器实时保存,当无任何更改操作一秒后进行保存。

javascript
// 防抖 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。(触发立即执行)
debounce(func, wait, immediate) {
	let timeout;
	return function () {
		const context = this;
		const args = [...arguments];
		if (timeout) clearTimeout(timeout);
		if (immediate) {
			const callNow = !timeout;
			timeout = setTimeout(() => {
				timeout = null;
			}, wait)
			if (callNow) func.apply(context, args)
		}
		else {
			timeout = setTimeout(() => {
				func.apply(context, args)
			}, wait);
		}
	}
}
// 防抖 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。(触发立即执行)
debounce(func, wait, immediate) {
	let timeout;
	return function () {
		const context = this;
		const args = [...arguments];
		if (timeout) clearTimeout(timeout);
		if (immediate) {
			const callNow = !timeout;
			timeout = setTimeout(() => {
				timeout = null;
			}, wait)
			if (callNow) func.apply(context, args)
		}
		else {
			timeout = setTimeout(() => {
				func.apply(context, args)
			}, wait);
		}
	}
}

3、节流

TIP

1、鼠标连续不断地触发某事件(如点击),单位时间内只触发一次;
2、监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。例如:懒加载;
3、浏览器播放事件,每个一秒计算一次进度信息等

javascript
// 节流 规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
throttle(func, delay) {
	let timer = null
	return function () {
		if (!timer) {
			timer = setTimeout(() => {
				func.apply(this, arguments)
				// 或者直接 func()
				timer = null
			}, delay)
		}
	}
}
// 节流 规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
throttle(func, delay) {
	let timer = null
	return function () {
		if (!timer) {
			timer = setTimeout(() => {
				func.apply(this, arguments)
				// 或者直接 func()
				timer = null
			}, delay)
		}
	}
}

3、用户信息脱敏显示

TIP

1、str字符串变量 start开始第几位之后替换 end第几位结束 middle中间替换的内容

javascript
// 节流 规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
forMate(str, start, end, middle) {
	if (!str) {
		return '--'
	}
	if (start < end) {
		var len = Math.abs(start - end);
		var text = "";
		for (var i = 0; i < len; i++) {
			text += middle;
		}
		return str.substring(0, start) + text + str.substring(end);
	}
	return false;
}
//forMate("17635477842",8,11,"*");						//1763547****
//forMate("41038119990927542X",6,14,"*");				//410381********542X
// 节流 规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
forMate(str, start, end, middle) {
	if (!str) {
		return '--'
	}
	if (start < end) {
		var len = Math.abs(start - end);
		var text = "";
		for (var i = 0; i < len; i++) {
			text += middle;
		}
		return str.substring(0, start) + text + str.substring(end);
	}
	return false;
}
//forMate("17635477842",8,11,"*");						//1763547****
//forMate("41038119990927542X",6,14,"*");				//410381********542X