1: 深拷贝 和 数据类型判断
// 函数库
const _ = {}
// 1: 判断数据类型
_.type = function (obj) {
return Object.prototype.toString.call(obj).replace(/\[object\s|\]/g, '')
}
// 2: 深拷贝-递归方式
_.deepCopy = function (obj) {
let buf
let type = _.type(obj)
switch (type) {
case 'Array':
buf = []
let i = obj.length
while (i--) {
buf[i] = _.deepCopy(obj[i])
}
return buf
case 'Object':
buf = {}
for (let k in obj) {
buf[k] = _.deepCopy(obj[k])
}
return buf
default:
return obj
}
}
// 2:深拷贝-JSON对象的parse和stringify
_.deepClone2 = function (obj){
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
}
// 3: 深拷贝-lodash的_.cloneDeep()
// 4: JQ的extend方法
$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
object1 objectN可选。 Object类型 第一个以及第N个被合并的对象。
_.deepClone4 = function (obj){
let a=[0,1,[2,3],4],
b = $.extend(true,[],a);
return b
}
// 判断对象中是否存在某个key
_.hasOwnProperty = function (obj, property) {
if (_.type(obj) == 'Object') {
return obj.hasOwnProperty(property)
}
return false
}
export default _
2: 获取base64图片大小,返回KB数字
// 获取base64图片大小,返回KB数字
getImgSize(str) {
//获取base64图片大小,返回KB数字
var str = base64url.replace('data:image/jpeg;base64,', '');//这里根据自己上传图片的格式进行相应修改
var strLength = str.length;
var fileLength = parseInt(strLength - (strLength / 8) * 2);
// 由字节转换为KB
var size = "";
size = (fileLength / 1024).toFixed(2);
return parseInt(size);
}
3: 截取 字符串 或者 数组
var slice = function (arrayLike, index) {
return Array.prototype.slice.call(arrayLike, index)
}
slice('gdsjfhdsfd', 3) // ['j', 'f', 'h', 'd', 's', 'f', 'd']
slice([1,3,5,6,7,9,22], 3) // [6, 7, 9, 22]
4: 生成随机数/日志号
// 生成随机数默认15位【日志号】
traceLogId (n = 18) {
let randomNum = []
for (let i = 0; i < n - 13; i++) {
randomNum.push(Math.floor(Math.random() * 10))
}
return (new Date().getTime()) + randomNum.join('')
}