# 基础知识
# 遍历对象
for (const key of Object.keys(obj)) {
console.log(obj[key]);
}
# filter 过滤
var arr = [1, 2, "", 3, " "];
var arr2 = arr.filter(function(item) {
return item;
}); //[1,2,3,' ']
# 本地特定的顺序排序数组
arr.sort((a, b) => {
return a.localeCompare(b);
});
# 去除对象 null 或者 undefined 的属性
const { omitBy, isNil } = require("lodash");
omitBy({ name, email, role }, isNil);
# es6求交集、并集、差集
let a=new Set([1,2,3]);
let b=new Set([2,3,4]);
//并集
let union=new Set([...a,...b]);
console.log(union);
//交集
let intersect=new Set([...a].filter(x=>b.has(x)));
console.log(intersect);
//差集
let diff=new Set([...a].filter(x=>!b.has(x)));
# 数组扁平化、去重、排序
已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
// 扁平化
let flatArr = arr.flat(4);
// 去重
let disArr = Array.from(new Set(flatArr));
// 排序
let result = disArr.sort(function(a, b) {
return a - b;
});
console.log(result);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
# 判断函数是否有
if (callback && typeof callback === "function") {
callback();
}
# dayjs 选时间
// 开始时间
// 今天开始从现在开始,后面的从零点开始
export function getStartTime(time) {
if (
dayjs(dayjs().format("YYYY-MM-DD")).isSame(dayjs(time).format("YYYY-MM-DD"))
) {
return dayjs(time).valueOf();
} else {
return dayjs(dayjs(time).format("YYYY-MM-DD")).valueOf();
}
}
// 从今天的零点开始
export function getStartTime(time) {
return dayjs(dayjs(time).format("YYYY-MM-DD")).valueOf();
}
// 结束时间
export function getEndTime(time) {
return dayjs(dayjs(time).format("YYYY-MM-DD"))
.add(1, "day")
.add(-1, "millisecond")
.valueOf();
}
# 数字格式化
/*
* 参数说明:
* number:要格式化的数字
* decimals:保留几位小数
* dec_point:小数点符号
* thousands_sep:千分位符号
* roundtag:舍入参数,默认 'ceil' 向上取,'floor'向下取,'round' 四舍五入
* */
function numberFormat(
number,
decimals = 6,
dec = ".",
sep = "",
roundtag = "round"
) {
number = (number + "").replace(/[^0-9+-Ee.]/g, "");
const n = !isFinite(+number) ? 0 : +number;
let x = String(number).indexOf(".") + 1;
let decIndex = x !== 0 ? String(number).length - x : 0; //小数的位数
decimals = decIndex < decimals ? decIndex : decimals;
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
let s = [];
const toFixedFix = function(n, prec) {
const k = Math.pow(10, prec);
return (
"" +
parseFloat(
Math[roundtag](parseFloat((n * k).toFixed(prec * 2))).toFixed(prec * 2)
) /
k
);
};
s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split(".");
const re = /(-?\d+)(\d{3})/;
if (sep !== "") {
while (re.test(s[0])) {
s[0] = s[0].replace(re, "$1" + sep + "$2");
}
}
if ((s[1] || "").length < prec) {
s[1] = s[1] || "";
s[1] += new Array(prec - s[1].length + 1).join("0");
}
return s.join(dec);
}
console.log(numberFormat(1200031.10001001));
# 16进制转rgba
/**
* 16 进制颜色转 rgba
* @param color 16 进制颜色
* @param transparency 透明度 0~1
*/
export default (color: string, transparency = 0.8) => {
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/
let sColor = color.toLowerCase()
// 如果是16进制颜色
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = '#'
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
}
sColor = sColorNew
}
//处理六位的颜色值
var sColorChange = []
for (var i = 1; i < 7; i += 2) {
// eslint-disable-next-line radix
sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))
}
return `rgba(${sColorChange.join(',')},${transparency})`
}
return sColor
}
# 中间显示省略号
export const showXing = (
str: string,
frontLen: number,
endLen: number,
xingNumber?: number,
) => {
let len = str.length - frontLen - endLen;
let xing = '';
for (let i = 0; i < (xingNumber ? xingNumber : len); i++) {
xing += '*';
}
return str.substring(0, frontLen) + xing + str.substring(str.length - endLen);
};
# 格式化百分比
/**
* 格式化百分比
* @param val 输入小数
* @param noUnit 没有
* @returns 格式化的百分比
*/
export const percentageTextFormat = (
val,
params: { hasUnit?: boolean; maximumFractionDigits?: number; hasDigits?: boolean } = {
hasUnit: true,
maximumFractionDigits: 2,
hasDigits: false,
},
) => {
const { hasUnit = true, maximumFractionDigits = 2, hasDigits = false } = params
const valStr = val ? (val * 100).toFixed(maximumFractionDigits) : 0
return (hasDigits ? valStr : Number(valStr) * 1) + (hasUnit ? '%' : '')
}
# 格式化数字
/**
* 格式化数字
* @param val 输入数字
* @param maximumFractionDigits 小数点后几位
* @returns 格式化的数字
*/
export const numberFormat = (val, maximumFractionDigits = 2, useGrouping = true) => {
if (!val) {
return 0
}
let res = val
if (typeof val !== 'number') {
res = Number(val)
}
res = res?.toLocaleString('zh', { maximumFractionDigits, useGrouping: false })
res = Number(res)
res = res?.toLocaleString('zh', { useGrouping })
return res
}
# 金额缩写
/**
* 金额缩写
* @param val 输入数字
* @returns 格式化的数字
*/
export const abbrNumberFormat = (val, maximumFractionDigits = 2, useGrouping = true) => {
if (!val) {
return {
num: 0,
abbrStr: '',
toString: () => {
return ''
},
}
}
let res = val
let abbr = ''
if (typeof val !== 'number') {
res = Number(val)
}
if (res > 100000000) {
res = res / 100000000
abbr = '亿'
} else {
if (res > 10000) {
res = res / 10000
abbr = '万'
}
}
res = res?.toLocaleString('zh', { maximumFractionDigits, useGrouping: false })
res = Number(res)
res = res?.toLocaleString('zh', { useGrouping })
return {
num: res,
abbrStr: abbr,
valueOf: function () {
return this.num + this.abbrStr
},
toString: function () {
return this.num + this.abbrStr
},
}
}