1、判断对象数组是否有相同属性 相同:true \ 不相同:false
export const hasDuplicates = (array, keyArr) => {
return array.some((item, index) => {
return array.findIndex((v, i) => {
let keyValue = '';
let keyValue1 = '';
keyArr.forEach(d => {
keyValue = keyValue += JSON.stringify(v[d]);
keyValue1 = keyValue1 += JSON.stringify(item[d]);
});
return i !== index && keyValue === keyValue1;
}) !== -1;
});
};
2、冒泡排序
// 冒泡排序
export const maopaoSort = (array) => {
if (Array.isArray(array)) {
if (array.length === 1) {
return array;
}
let temp = null;
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}
};
3、数组对象去重,根据key去重
// 数组对象去重,根据key去重
export const nodup = (arr, key) => {
const map = new Map();
for (const item of arr) {
if (!map.has(key ? item[key] : item)) {
map.set(key ? item[key] : item, item);
}
}
return [...map.values()];
};
4、截取几位小数
/**
* 截取几位小数
* @param {number} value 浮点数
* @param {number} [number=2] 保留几位小数
* @param {boolean} [round] 是否四舍五入
* @returns {number}
*/
export function toFixed(value, number = 2, round) {
const method = round ? Math.round : Math.floor;
return method(Math.pow(10, number) * value) / Math.pow(10, number);
}
5、递归对象或数组清除文本类型值的两边空格
/**
* 递归对象或数组清除文本类型值的两边空格
* @param {Object|Array} obj
* @return {Object|Array}
*/
export function trim(obj) {
const type = typeof obj;
if (type === 'string') {
return obj.trim();
}
if (Array.isArray(obj)) {
return obj.map(n => trim(n));
}
if (obj && type === 'object') {
Object.entries(obj).forEach(([k, v]) => {
obj[k] = trim(v);
});
return obj;
}
return obj;
}
6、获取数据类型
/**
* 获取数据类型
* @param {*} data 任何数据
* @return {string} 数据类型,如:Number,String,Boolean,Object,Array,Date,Null,Undefined
*/
export function getType(data) {
const str = Object.prototype.toString.call(data);
const result = str.match(/\[object ([\w]+)\]/);
return (result && result.length > 1)
? result[1]
: '';
}
7、数字转发大写金额格式
// 数字转发大写金额格式
export function toChineseMoney(n) {
if (n === 0) {
return '零';
}
if (!/^(\+|-)?(0|[1-9]\d*)(\.\d+)?$/.test(n)) {
return '数据非法';
}
let unit = '仟佰拾亿仟佰拾万仟佰拾元角分';
let str = '';
n += '00';
const a = parseFloat(n);
if (a < 0) {
n = n.substr(1);
}
const p = n.indexOf('.');
if (p >= 0) {
n = n.substring(0, p) + n.substr(p + 1, 2);
}
unit = unit.substr(unit.length - n.length);
for (let i = 0; i < n.length; i++) {
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
}
if (a > 0) {
return str.replace(/零([仟佰拾角])/g, '零').replace(/(零)+/g, '零').replace(/零([万亿元])/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '圆整');
} else {
return '负' + str.replace(/零([仟佰拾角])/g, '零').replace(/(零)+/g, '零').replace(/零([万亿元])/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '圆整');
}
}
8、数字格式
/**
* 数字格式
* value:值
* decimalsLen: 保留几位小数
* integerLen: 整数长度
* */
export function numberFormat(value, decimalsLen, integerLen = 9) {
value = String(value);
if (decimalsLen) {
value = value.replace(/[^0-9.]/ig, '');
}
if (!decimalsLen) {
value = value.replace(/[^0-9]/ig, '');
let arr = value.split('');
if (arr[0] === '0') {
return '0';
}
if (arr?.length > integerLen) {
arr = arr.splice(0, integerLen);
}
return arr.join('');
}
let dotIndex = 0;
for (let i = 0; i < value.length; i++) {
if (value[i] === '.') {
dotIndex = i;
break;
}
}
value = value.replace(/\./ig, '');
value = value.split('');
if (dotIndex !== 0) {
value.splice(dotIndex, 0, '.');
}
value = value.join('');
const arr = value.split('.');
if (arr[0].indexOf('0') === 0) arr[0] = 0;
if (arr[0].length > integerLen) {
arr[0] = arr[0].substring(0, integerLen);
}
if (arr[1]?.length > decimalsLen) {
arr[1] = arr[1].slice(0, decimalsLen);
}
if (arr.length === 2) value = arr[0] + '.' + arr[1];
if (dotIndex === 0) value = arr[0];
return value;
}
9、文件下载模块
/**
* 文件下载模块
* @module download
*/
/**
* 二进制文件流下载
* @param {BlobPart} data 文件流
* @param {string} fileName 下载文件名
*/
export function downloadBlob(data, fileName) {
const blob = new Blob([data]);
const link = document.createElement('a');
link.download = fileName;
link.style.display = 'none';
link.href = URL.createObjectURL(blob);
link.click();
URL.revokeObjectURL(link.href);
}
/**
* 文件url下载
* @param {string} url 文件地址
* @param {string} fileName 下载文件名
*/
export function downloadUrl(url, fileName) {
const link = document.createElement('a');
link.download = fileName;
link.href = url;
link.target = '_blank';
link.click();
}
/**
* post方式下载文件
* @param {string} url 请求地址
* @param {object} params 请求参数对象
* @param {string} [method=post] 请求类型
*/
export function downloadPost(url, params = {}, method = 'post') {
const form = document.createElement('form');
form.style.display = 'none';
form.action = url;
form.method = method;
form.target = '_blank';
Object.keys(params).forEach(name => {
const input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = params[name];
form.appendChild(input);
});
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
export default {
downloadBlob,
downloadUrl,
downloadPost
};
10、日期格式化
/**
* 日期格式化
*/
export function dateFormat (fmt, date) {
const o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
S: date.getMilliseconds()
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (const k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
}
}
return fmt;
}
标签:常用,return,arr,value,JS,const,array,replace,方法
From: https://blog.csdn.net/weixin_44208880/article/details/136844100