1.获取图书馆名称
export function libraryNameString(libraryList, libraryString) {
let string = '';
//let serviceArray = [];
if (libraryList) {
libraryList.forEach(i => {
if (libraryString === i.code) {
string = i.name
//serviceArray.push(i.name)
}
});
}
return string;
}
2.获取文件后缀名
/**
* 获取文件后缀名
* @param {String} filename
*/
export function getExt(filename) {
if (typeof filename == 'string') {
return filename
.split('.')
.pop()
.toLowerCase()
} else {
throw new Error('filename must be a string type')
}
}
3. 复制内容到剪贴板
export function copyToBoard(value) {
const element = document.createElement('textarea')
document.body.appendChild(element)
element.value = value
element.select()
if (document.execCommand('copy')) {
document.execCommand('copy')
document.body.removeChild(element)
return true
}
document.body.removeChild(element)
return false
}
4. 数组去重
/**
* 数组去重
* @param {*} arr
*/
const arr = [1,3,4,5,2,2,1,2];
// 数组去重复1
function unique(arr) {
if (!Array.isArray(arr)) {
throw new Error('不是一个数组')
}
return [...new Set(arr)]
}
// 数组去重复2
function unique(arr) {
return Array.from(new Set(arr))
}
// 数组去重复3
function unique(arr) {
const brr = []
for(let i = 0;i<arr.length;i++){
if(brr.indexOf(arr[i]) == -1){
brr.push(arr[i])
}
}
return brr
}
// 数组去重复4
function unique(arr) {
arr = arr.sort()
const brr = []
for(let i = 0; i<arr.length; i++){
if(arr[i] !== arr[i-1]){
brr.push(arr[i])
}
}
return brr
}
console.log(unique(arr))
5. 数组对象去重
/**
* 数组去重
* @param {*} arr
*/
uniqBy(arr,'id')
uniqWith(arr,isEqual)
let arr = [{title:'tom'},{title:'tom'},{title:'jack'},{title:'kang'}];
let obj = {};
let newArr = cloneDeep(arr);
newArr = newArr.reduce((item, next) => {
obj[next.label] ? '' : (obj[next.label] = true && item.push(next));
return item;
}, []);
let list = [];
const newArr = arr.reduce((prev,current)=>{
if(!list.includes(current['title'])){
list.push(current['title'])
prev.push(current)
}
return prev
},[])
console.log(newArr)
filter = (arr, prop) => {
const keys = [];
const newArr = arr.reduce((prev, current) => {
if (!keys.includes(current[prop])) {
keys.push(current[prop]);
prev.push(current);
}
return prev;
}, []);
return newArr;
};
6. 保留小数点以后几位,默认2位
// 保留小数点以后几位,默认2位
export function cutNumber(number, no = 2) {
if (typeof number != 'number') {
number = Number(number)
}
return Number(number.toFixed(no))
}
const round = (n, d) => Number(Math.round(n + "e" + d) + "e-" + d)
round(1.005, 2) //1.01
round(1.555, 2) //1.56
7. 对象转化为formdata
function getFormData(object) {
const formData = new FormData()
Object.keys(object).forEach(key => {
const value = object[key]
if (Array.isArray(value)) {
value.forEach((subValue, i) =>
formData.append(key + `[${i}]`, subValue)
)
} else {
formData.append(key, object[key])
}
})
return formData
};
let req={
file:'1.txt',
userId:1,
phone:'15198763636',
//...
}
fetch(getFormData(req))
8. 简单的深拷贝
/**
*深拷贝
* @export
* @param {*} obj
* @returns
*/
export function cloneDeep(obj) {
if (typeof obj !== 'object') return obj;
let result = Array.isArray(obj)?[]:{};
for (let i in obj){
if(obj.hasOwnPorperty(i)){
result[i]=cloneDeep(obj[i])
}
}
return result
}
9. 生成随机字符串
/**
* 生成随机id
* @param {*} length
* @param {*} chars
*/
export function uuid(length, chars) {
chars =
chars ||
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
length = length || 8
var result = ''
for (var i = length; i > 0; --i)
result += chars[Math.floor(Math.random() * chars.length)]
return result
}
10. 时间排序
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。\
若 a 等于 b,则返回 0。\
若 a 大于 b,则返回一个大于 0 的值。
/**
* 时间排序
* @param {*} length
* @param {*} chars
*/
var data = [
{ name: "1", time: "2019-04-26 10:53:19"},
{ name: "2", time: "2019-04-26 10:51:19"},
{ name: "3", time: "2019-04-26 11:04:32"},
{ name: "4", time: "2019-04-26 11:05:32"},
];
data.sort(function (a, b) {
return a.time < b.time ? 1 : -1;
});
11. js两个数组对象合并成一个数组对象
var obj1 = [{
"id": 980550455852,
}, {
"id": 980550566221,
}];
var obj2 = [{
"price": "6666"
}, {
"price": "8888"
}];
var obj = obj1.map((item,index) => {
return {...item, ...obj2[index]};
});
console.log(obj);
11. js对象value相加 num
let = numbeAdd={id:0,name:1,num:3}
Object.values(numbeAdd)
.map(Number)
.reduce((sum, current) => {
return sum + current;
}, 0);
12. js两个数组对象根据id去重
const arr1Id = Arr1.map((i) => i.id);
let removalArr = Arr2.filter((item: any) => {
if (arr1Id.includes(item.id)) return item;
});
const index = list.findIndex((d: string) => d.uid === file.uid);
if (index !== -1) {
list.splice(index, 1);
}
13. js数组对象根据多个对象值的替换
let Arr = [
{id:'a',value:'1',name:'one'},
{id:'b',value:'2',name:'two'},
]
let obj1 = {a:'aa'}
let obj2 = {b:'bb'}
Arr.forEach((item: any) => {
if (obj1[item.id]) {
item.value = obj1[item.id];
}
if (obj2[item.id]) {
item.name = obj2[item.id];
}
});
console.log(Arr)
14. 校验类型
export const isNumber = (e) =>{
return Object.prototype.toString.call(e).slice(8,-1) === 'String'
}
15. 获取字符串中某个字符出现的频率
const fun = (str) => {
if (!str) return;
let obj = {};
for (let i = 0; i < str.length; i++) {
obj[str[i]] = str.split(str[i]).length - 1;
//str.split(str[i]).length - 1 // 某个字符出现的次数
}
if (JSON.stringify(obj) === '{}') return;
let num = Object.values(obj)
.filter((f) => f)
.sort(function (a, b) {
return b - a;
})[0];
let str2 = '';
for (let j in obj) {
if (obj[j] === num) {
str2 = j;
}
}
console.log('出现频率最高的为:', str2, num);
};
fun('dasgjashgjkchdskvsad')
16. 判断是否为数组
const arr = [1,3,4,5,2,2,1,2];
console.log(Array.isArray(arr))
console.log(arr instanceof Array || arr instanceof Object)
console.log(Object.prototype.toString.call(arr).slice(8,-1) === 'Array')
console.log(arr.constructor.toString().indexOf('Array') !== -1)
console.log(Array.prototype.isPrototypeOf([]))