工具类方法集合
数学计算
export default class MathBase {
// 加法
add(...list) {
return list.reduce(MathBase._add);
}
// 减法
subtract(...list) {
return list.reduce(MathBase._subtract);
}
// 乘法
multiply(...list) {
return list.reduce(MathBase._multiply);
}
// 除法
divide(...list) {
return list.reduce(MathBase._divide);
}
// 加法
static _add(n, m) {
const { F, S, T, l1, l2 } = MathBase.getInteger(n, m);
return (
(F[0] * T + (F[1] * T) / Math.pow(10, l1) + S[0] * T + (S[1] * T) / Math.pow(10, l2)) / T
);
}
// 减法
static _subtract(n, m) {
const { F, S, T, l1, l2 } = MathBase.getInteger(n, m);
return (
(F[0] * T + (F[1] * T) / Math.pow(10, l1) - S[0] * T - (S[1] * T) / Math.pow(10, l2)) / T
);
}
// 乘法
static _multiply(n, m) {
const { F, S, T, l1, l2 } = MathBase.getInteger(n, m);
return (
((F[0] * T + (F[1] * T) / Math.pow(10, l1)) * (S[0] * T + (S[1] * T) / Math.pow(10, l2))) /
T /
T
);
}
// 除法
static _divide(n, m) {
const { F, S, T, l1, l2 } = MathBase.getInteger(n, m);
return (F[0] * T + (F[1] * T) / Math.pow(10, l1)) / (S[0] * T + (S[1] * T) / Math.pow(10, l2));
}
static numToString(tempArray) {
if (typeof tempArray === 'number') {
return tempArray.toString();
}
return '0';
}
static handleNum(n) {
n = n.toString();
let temp = n.split('.');
temp.push(temp[1].length);
return temp;
}
static getInteger(n, m) {
n = typeof n === 'string' ? n : MathBase.numToString(n);
m = typeof m === 'string' ? m : MathBase.numToString(m);
let F = n.indexOf('.') !== -1 ? MathBase.handleNum(n) : [n, 0, 0];
let S = m.indexOf('.') !== -1 ? MathBase.handleNum(m) : [m, 0, 0];
let l1 = F[2];
let l2 = S[2];
let L = Math.max(l1, l2);
let T = Math.pow(10, L);
return { F, S, T, l1, l2 };
}
}
URL 参数处理
url 的参数变成对象
/**
* 将 get 链接上的参数变成对象
* @param {string} str - ?classcode=139
* @return {object} {classcode: '139'}
*/
export const queryString2Object = str => {
const obj = {};
const arr1 = str.split('?');
const arr2 = arr1[1].split('&');
for (const i = 0; i < arr2.length; i++) {
const res = arr2[i].split('=');
obj[res[0]] = res[1];
}
return obj;
};
对象转换为 URL 查询参数
/**
* 对象转换为URL查询参数
* @param {object} obj - {classcode: '139', name: '美术'}
* @return {string} classcode=139&name=美术
*/
export const object2QueryString = obj => {
const ret = [];
for (const key in obj) {
key = encodeURIComponent(key);
const values = obj[key];
if (values && values.constructor == Array) {
//数组
const queryValues = [];
for (let i = 0, len = values.length, value; i < len; i++) {
value = values[i];
queryValues.push(toQueryPair(key, value));
}
ret = ret.concat(queryValues);
} else {
ret.push(toQueryPair(key, values));
}
}
return ret.join('&');
};
const toQueryPair = (key, value) => {
if (typeof value == 'undefined') return key;
return key + '=' + encodeURIComponent(value === null ? '' : String(value));
};
利用 new URL 解析 URL
const parseURL = (url = '') => {
const res = new URL(url);
res.queryParams = key => {
if (key) {
return res.searchParams.get(key);
}
const params = {};
const paramGroup = res.search.replace(/^\?/, '').split('&');
paramGroup.forEach(param => {
const [key, val] = param.split('=');
params[key] = val;
});
return params;
};
return res;
};
let urlObject = parseURL('https://www.example.com/api/test?name=houfei&age=12');
console.log(urlObject.queryParams('name'));
console.log(urlObject.queryParams('age'));
获取图片宽高
function getImageDimensions(url) {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = url;
img.onload = () => {
resolve({ width: img.width, height: img.height });
};
img.onerror = error => {
reject(error);
};
});
}
async function fetchImageDimensions() {
try {
const imageUrl = '路径/到/你的图片.jpg';
const dimensions = await getImageDimensions(imageUrl);
console.log('图片宽度:' + dimensions.width);
console.log('图片高度:' + dimensions.height);
} catch (error) {
console.error('加载图片出错:', error);
}
}
fetchImageDimensions();
常见方法
// 获取过去一周的时间
[...Array(7).keys()].map(days => new Date(Date.now() - 86400000 * days));
// 生成随机 ID
const codeId = Math.random().toString(36).substring(2);
// 获取 URL 的查询参数
const url = '?page=smqd%2Fuser%2FevalFill&channelType=CKJKX&orderId=&cardticketId=T363503';
let object = {};
// location.search.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => object[k] = v)
url.replace(/([^?&=]+)=([^&]+)/g, (_, k, v) => (object[k] = v));
console.log(object);
// 生成本地时间
new Date().toLocaleString().slice(0);
// const now = new Date().toLocaleString().slice(9, 19)
// 生成随机颜色
const color =
'#' +
Math.floor(Math.random() * 0xffffff)
.toString(16)
.padEnd(6, '0');
// 公倍数问题:找到 1 ~ 100 中 3的倍数 和 5的倍数
for (i = 0; ++i < 101; console.log(i % 5 ? f || i : f + '5的倍数')) f = i % 3 ? '' : '3的倍数';
// 获取本月天数
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const days = new Date(year, month, 0).getDate();
// 1行代码实现星级评分
const getRate = (rate = 0) => '★★★★★☆☆☆☆☆'.slice(5 - rate, 10 - rate);
// 一行代码生成指定长度的数组
const getArray = len => [...new Array(len).keys()];
// 获取数据类型
const getType = data =>
data instanceof Element
? 'element'
: Object.prototype.toString
.call(data)
.replace(/\[object\s(.+)\]/, '$1')
.toLowerCase();
};