JS 驼峰命名的转换
// 下划线转换驼峰
function toHump(name) {return name.replace(/\_(\w)/g, function(all, letter){return letter.toUpperCase();});}
// 驼峰转换下划线
function toLine(name) {return name.replace(/([A-Z])/g,"_$1").toLowerCase();}
JS 数组操作
获得数组中的最大/小值
// 获得最小值let getArrMin =(arr)=> {return Math.min(...arr)}使用:getArrMin([1,222,3]) // return 1// 获得最大值let getArrMax =(arr)=> {return Math.max(...arr)}使用:getArrMax([1,222,3]) // return 222
sort 排序
// 从小到大let sortArr = (arr) => {return arr.sort((a, b) => {return a - b})}// 从大到小let sortArr = (arr) => {return arr.sort((a, b) => {return b-a})}// 冒泡排序let sortArr = (arr) => {let temp = null;for (let i = 0; i < arr.length; i++) {for (let j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}return arr;}
判断某个值是否在一个数组中
arr.indexof(value) === -1?不在:在返回值所在的下标
取得制定字符前后的值
例如:list_user 获得下划线前后的值list_user.split('_')[0] -----> listlist_user.split('_')[1] -----> user
数组对象中数据操作
存在替换,不存在新增
const arr1 = [{'id':12,'name':'zhang'},{'id':13,'name':'xin'}]const obj1 = {'id':12,'name':'qiao'}
解决方法一、
// 设置一个判断标志objExists(){const flag = falseconst indexfor(var i=0;i<arr1.length;i++){if(obj1.id == arr1[i].id){flag = trueindex = i}}//如果有就替换 没有就插入if( flag ) {arr1.splice(index,1,obj1)} else {arr1.push(obj1)}}
方法二、
objExists(){const flag = falseconst indexfor(var i=0;i<arr1.length;i++){if(obj1.id == arr1[i].id){arr1[i] = {}arr1[i] = obj1return arr1}arr1.push(obj1)}//如果有就替换 没有就插入if( flag ) {arr1.splice(index,1,obj1)} else {arr1.push(obj1)}}
对象数据合并
const merge = (...objs) =>[...objs].reduce((acc, obj) =>Object.keys(obj).reduce((a, k) => {acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];return acc;}, {}),{});// EXAMPLESconst object = {a: [{ x: 2 }, { y: 4 }],b: 1};const other = {a: { z: 3 },b: [2, 3],c: 'foo'};merge(object, other); // { a: [ { x: 2 }, { y: 4 }, { z: 3 } ], b: [ 1, 2, 3 ], c: 'foo' }
二维数组转为一维数组
const arr = [].concat.apply([], arr1.filter(item => item))
数组取交集
// 方案一:只支持2个数据const arr = arr1.filter(item => arr2.indexOf(item) > -1)// 方案二:只支持2个数据[...a].filter(x => [...b].some(y => y.categoryId === x.categoryId))//或者:只支持2个数据Array.from(a).filter(x => Array.from(b).some(y => y.categoryId === x.categoryId))// 方案三: 可支持多个数组const listChunk = (list, size = 1, cacheList = [])=>{const tmp = [...list];if (size <= 0) {return cacheList;}while (tmp.length) {cacheList.push(tmp.splice(0, size));}return cacheList;}
数组取差集
[...a].filter(x => [...b].every(y => y.categoryId !== x.categoryId))
数组去重
- 数组去重
// 方案 定义一个临时数组,遍历原来的数组uniq (data) {var temp = [] // 一个新的临时数组for (var i = 0; i < data.length; i++) {if (temp.indexOf(data[i]) === -1) {temp.push(data[i])}}return temp}// 方案 二var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]
- 数组对象去重
arrObjRemoveRepeat(data) {let result = []for (let i = 0; i < data.length; i++) {let flag = truelet temp = data[i]for (let j = 0; j < result.length; j++) {// 普通数组 (temp === result[j])if (temp !== undefined) {if (temp.n === result[j].n) {flag = falsebreak}}}if (flag) {result.push(temp)}}return result}
JS 数组分组排序
数组过滤
- 去掉空数组空字符串、undefined、null
var arr = ['1','2',undefined, '3.jpg',undefined]var newArr = arr.filter(item => item)console.log(newArr)var arr = ['1','2',null, '3.jpg',null]var newArr = arr.filter(item => item)console.log(newArr)>//空字符串里面不能包含空格var arr = ['1','2','', '3.jpg','']var newArr = arr.filter(item => item)console.log(newArr)
- 过滤不符合项
var arr = ['10','12','23','44','42']var newArr = arr.filter(item => item.indexOf('2')<0)console.log(newArr)
文章摘自[https://www.cnblogs.com/lizhao123/p/9528124.html]
数组分组
const chunkArr = (arr, size) =>Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>arr.slice(i * size, i * size + size))chunkArr(arr, 4)
JS 对象操作
- 判断对象是否为空
var data = {};var arr = Object.keys(data);console.log(arr.length === 0);//true
- 数组中的多个对象合并为一个对象
## ES6Object.assign(...arr)## 普通const obj = config.reduce((pre, cur, index) => {Object.keys(cur).forEach(key => pre[`${key}${index + 1}`] = cur[key])return pre}, {})
- 去除对象中为空或未指定值
/*** null => ''* @param {*} data 要处理的数据*/function null2str(data) {for (let x in data) {if (data[x] === null) { // 如果是null 把直接内容转为 ''data[x] = '';} else {if (Array.isArray(data[x])) { // 是数组遍历数组 递归继续处理data[x] = data[x].map(z => {return null2str(z);});}if(typeof(data[x]) === 'object'){ // 是json 递归继续处理data[x] = null2str(data[x])}}}return data;}let data = {id:1,name:null}console.log(null2str(data))for(attr in data){ //在遍历对象判断是null并且设置为想要的值if(data[attr]==="null")data[attr]='未记录'}console.log(data)
JS 字符串操作
去除字符串空格
- 正则匹配
去除字符串内所有的空格:str = str.replace(/\s*/g,"");去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,"");去除字符串内左侧的空格:str = str.replace(/^\s*/,"");去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
- str.trim()方法
| trim()方法是用来删除字符串两端的空白字符并返回,trim方法并不影响原来的字符串本身,它返回的是一个新的字符串。
缺陷:只能去除字符串两端的空格,不能去除中间的空格
单独去除左侧空格则使用 str.trimLeft(); //var str_1 = str.trimLeft();
单独去除右侧空格则使用 str.trimRight();//var str_1 = str.trimRight(); | | —- |
文章摘自[https://www.cnblogs.com/a-cat/p/8872498.html]
对象操作
对象合并
Object.assign({}, {})// 或者复制对象Object.assign({},obj)
判断对象是否为空
Object.keys(obj).length ===0 true
Input 输入限制
oninput="if( value < 0 ){alert('非法输入!');value = ''}"
获取鼠标的位置
function forward(event) {
var e = event || window.event;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
var x = e.pageX || e.clientX + scrollX;
var y = e.pageY || e.clientY + scrollY;
alert(x + "," + y); //相对于浏览器
}
document.onclick = forward;
var JPos = {};
(function($) {
$.$getAbsPos = function(p) {
var _x = 0;
var _y = 0;
while (p.offsetParent) {
_x += p.offsetLeft;
_y += p.offsetTop;
p = p.offsetParent;
}
_x += p.offsetLeft;
_y += p.offsetTop;
return {
x: _x,
y: _y
};
};
$.$getMousePos = function(evt) {
var _x, _y;
evt = evt || window.event;
if (evt.pageX || evt.pageY) {
_x = evt.pageX;
_y = evt.pageY;
} else if (evt.clientX || evt.clientY) {
_x = evt.clientX + document.body.scrollLeft - document.body.clientLeft;
_y = evt.clientY + document.body.scrollTop - document.body.clientTop;
} else {
return $.$getAbsPos(evt.target);
}
return {
x: _x,
y: _y
};
}
})(JPos);
原生JSalert 弹出去掉默认携带的域名和地址:
window.alert = function(name){
var iframe = document.createElement("IFRAME");
iframe.style.display="none";
iframe.setAttribute("src", 'data:text/plain,');
document.documentElement.appendChild(iframe);
window.frames[0].window.alert(name);
iframe.parentNode.removeChild(iframe);
};
window.confirm = function (message) {
var iframe = document.createElement("IFRAME");
iframe.style.display = "none";
iframe.setAttribute("src", 'data:text/plain,');
document.documentElement.appendChild(iframe);
var alertFrame = window.frames[0];
var result = alertFrame.window.confirm(message);
iframe.parentNode.removeChild(iframe);
return result;
};
学习网站 :https://www.html.cn/30-seconds-of-code/#chunk
小数位不够,用0补足位数
function dealWithFun(num,bit) {
const fixNum = parseFloat(num)
if(isNaN(fixNum) {
return 0
}
const str_x = num.toString()// 为了后面值的拼接
const point_decimal = fixNum.indexOf('.') // 取得小数点的下标key
// 位数不足补0
while(fixNum.length <= point_decimal.length + bit) {
str_x +='0'
}
return str_x
}
下载图片
var x = new XMLHttpRequest();
x.open("GET", "url", true);
x.responseType = 'blob';
x.onload = function (e) {
var url = window.URL.createObjectURL(x.response)
var a = document.createElement('a');
a.href = url
a.download = ''
a.click()
}
x.send();
