一.根据对象的value找到该对象对应的key
findObjectKeyByValue( value, compare = (a, b) => a===b) {
return Object.keys(obj).find( k => compare(obj[k], value)
)}
使用到的js基本知识点:
a.Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。
b.数组的find() 方法返回通过测试(函数内判断)的数组的第一个元素的值。find() 方法为数组中的每个元素都调用一次函数执行:
- 当数组中的元素在测试条件时返回true时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回 undefined
注意: 1. find() 对于空数组,函数是不会执行的。2. find() 并没有改变数组的原始值。
二.截断字符串(考虑有表情符号的情况)
formateNoteInfo( note: string, length: number) {
note = note.replace("\n", '');
note = note.replace(/\ /g, "")
if (note.length > length) {
let str: string = note.substr(0, length);
let reg: any = /[\u4e00-\u9fa5]/;//汉字
let reg2: any = /[0-9a-z]/i;//
let reg3: any = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/;//中文标点符号
let reg4: any = /[\x21-\x2f\x3a-\x40\x5b-\x60\x7B-\x7F]/;//英文符号
let k: number = 0;//既不是中文也不是数字和英文字符的个数
for(let i=0;i<length;i++) {
if (!reg.test(str[i]) && !reg2.test(str[i]) && !reg3.test(str[i]) && !reg4.test(str[i])) {
k++;
}
}
if (k%2==0)//截断部分表情时完整的
return str + '...';
else {//截断部分表情不完整,需求再多截取一个字符
return note.substr(0, length + 1) + '...';
}
} else return note;
}
截取到表情的一半时,显示到页面上的是乱码,所以得保证截取到的部分表情符号占据偶数个字节
三.获取URL中指定参数的值
getParamOfURL(name: string) {
var reg: any = new RegExp("(|&)"+ name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r!=null) {
return decodeURI(r[2]);
}
return null;
}
四.一行显示2列(每列代表一种数据),不满足条件的数据不显示(比如数字为0)
解决思路:
- 先筛选出需要显示出来的数据,并将其放在一个数组中;
- 然后将数据以对象的形式保存到一个新的数组中,一行有n列那么数组的每一个元素就需要放在n个对象(最后一个元素可能少于n个元素);
- 最后在HTML中遍历这个数组中的数据就可以了(遍历时数组中的每一个元素就代表着一行的数据)
五.获取近30天的日期并返回数组
getRecent30Days() {//获取前30天的日期
let nowDate = new Date();
let oldDate = new Date(nowDate);
let xLabels: any = [];
for (let i = 0; i < 30; i++) {
oldDate.setDate(nowDate.getDate() - 30 + i);
xLabels.push(oldDate.getDate() + '/' + (oldDate.getMonth() + 1));
oldDate = new Date(nowDate);
}
return xLabels
}
六.统计字符个数(中文算两个字符,其余的算一个字符)
//统计字符串中的字符数(中文算两个)
statisticChar(str) {
let len = 0;
for(let i=0;i<str.length;i++) {
if (str.charCodeAt(i) > 256) {
len += 2;
} else len += 1;
}
}
//检查字符串中是否有中文字符
function isChinese(str){
var RegExp = new RegExp('[\\u4E00-\\u9FFF]','g');
return RegExp.test(str);
}