这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战
深拷贝
在JS中,数据类型分为基本数据类型和引用数据类型两种,对于基本数据类型来说,它的值直接存储在栈内存中,而对于引用类型来说,它在栈内存中仅仅存储了一个引用,而真正的数据存储在堆内存中
对于引用类型来说,我们将 obj1 赋予 obj2 的时候,我们其实仅仅只是将 obj1 存储在栈堆中的的引用赋予了 obj2 ,而两个对象此时指向的是在堆内存中的同一个数据,所以当我们修改任意一个值的时候,修改的都是堆内存中的数据,而不是引用,所以只要修改了,同样引用的对象的值也自然而然的发生了改变
防止出现两个对象相同的引用,出现修改一个对象影响到另一个对象的问题,我们使用深拷贝来解决这个问题
function deepCopy(arr) {
var obj = arr instanceof Array ? [] : {};
for (var item in arr) {
if (arr[item] != "null" && arr[item] != null) {
if (typeof arr[item] === "object") {
obj[item] = qfyDeepCopy(arr[item]);
} else {
obj[item] = arr[item];
}
}
}
return obj;
}
复制代码
数组排序
这里封装的是快排时间复杂度O(nlogn)比平常的冒泡排序O(n2)会好一些。
function quicklySort(brr) {
if (!Array.isArray(brr)) {
console.log('type error!');
return;
}
if (brr.length <= 1) { //当数组brr的长度 <= 1 的时候,以为这brr这个数组只有一个数或者是个空数组,那么久直接返回,不需要往下进行
return brr
}
var centerIndex = Math.floor(brr.length / 2); //获取中间数的下标
var centerNum = brr.splice(centerIndex, 1)[0]; //通过中间数的下标来找中的数
var left = [],
right = []; //建立左右两个空的数组
for (var i = 0; i < brr.length; i++) { //进行for循环
if (brr[i] < centerNum) { //当下标所对应的数小于中间是数的时候,推入左边数组的最后边
left.push(brr[i])
} else { //不符合条件的推入右边数组的后边
right.push(brr[i])
}
}
// console.log(left,right)
return quicklySort(left).concat([centerNum], quicklySort(right)) //用concat将左边数组、中间数和右边数组连接起来
}
复制代码
保留小数点后几位(不四舍五入)默认两位
js中取小数点后两位方法最常用的就是toFixed方法了,但是toFixed会对保留小数进行四舍五入,如果我们有需求不进行四舍五入就得自己封装个保留小数的函数了。
/*
* @Description: 保留小数点后几位(不四舍五入)默认两位
* @param {Float} x 要处理的小数
* @param {Float} num 保留几位
*/
// 备注:parseFloat、parseInt有问题。parseFloat('1a')==1
function qfyToDecimal(x, num) {
// var f = parseFloat(x);
x = (x + '').trim(); //转成字符串 去空格
var f = x / 1;
// num = parseInt(num) || 2;
num = num / 1 || 2;
if (isNaN(f) || x === '' || isNaN(num) || num % 1 != 0) {
console.log('type error!');
return;
}
var divisorNum = Math.pow(10, num)
var f = Math.round(x * divisorNum) / divisorNum;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + num) {
s += '0';
}
return s;
}
复制代码
字符替换
/*
* @Description: 字符替换
* @param {String} str 要处理的字符串
* @param {String} l 表示你将要替换的字符
* @param {String} r 表示你想要替换的字符
*/
function qfyStrReplace(str, l, r) {
if (typeof str != "string") {
console.log('type error!');
return;
}
var reg = new RegExp(l, 'g') // g表示全部替换,默认替换第一个
str = str.replace(reg, r)
return str
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END