JS 驼峰命名的转换

// 下划线转换驼峰

  1. function toHump(name) {
  2. return name.replace(/\_(\w)/g, function(all, letter){
  3. return letter.toUpperCase();
  4. });
  5. }

// 驼峰转换下划线

  1. function toLine(name) {
  2. return name.replace(/([A-Z])/g,"_$1").toLowerCase();
  3. }

JS 数组操作

获得数组中的最大/小值

  1. // 获得最小值
  2. let getArrMin =(arr)=> {
  3. return Math.min(...arr)
  4. }
  5. 使用:
  6. getArrMin([1,222,3]) // return 1
  7. // 获得最大值
  8. let getArrMax =(arr)=> {
  9. return Math.max(...arr)
  10. }
  11. 使用:
  12. getArrMax([1,222,3]) // return 222

sort 排序

  1. // 从小到大
  2. let sortArr = (arr) => {
  3. return arr.sort((a, b) => {
  4. return a - b
  5. })
  6. }
  7. // 从大到小
  8. let sortArr = (arr) => {
  9. return arr.sort((a, b) => {
  10. return b-a
  11. })
  12. }
  13. // 冒泡排序
  14. let sortArr = (arr) => {
  15. let temp = null;
  16. for (let i = 0; i < arr.length; i++) {
  17. for (let j = i + 1; j < arr.length; j++) {
  18. if (arr[i] > arr[j]) {
  19. temp = arr[i];
  20. arr[i] = arr[j];
  21. arr[j] = temp;
  22. }
  23. }
  24. }
  25. return arr;
  26. }

判断某个值是否在一个数组中

  1. arr.indexof(value) === -1?不在:在返回值所在的下标

取得制定字符前后的值

  1. 例如:list_user 获得下划线前后的值
  2. list_user.split('_')[0] -----> list
  3. list_user.split('_')[1] -----> user

数组对象中数据操作

存在替换,不存在新增

  1. const arr1 = [{'id':12,'name':'zhang'},{'id':13,'name':'xin'}]
  2. const obj1 = {'id':12,'name':'qiao'}

解决方法一、

  1. // 设置一个判断标志
  2. objExists(){
  3. const flag = false
  4. const index
  5. for(var i=0;i<arr1.length;i++){
  6. if(obj1.id == arr1[i].id){
  7. flag = true
  8. index = i
  9. }
  10. }
  11. //如果有就替换 没有就插入
  12. if( flag ) {
  13. arr1.splice(index,1,obj1)
  14. } else {
  15. arr1.push(obj1)
  16. }
  17. }

方法二、

  1. objExists(){
  2. const flag = false
  3. const index
  4. for(var i=0;i<arr1.length;i++){
  5. if(obj1.id == arr1[i].id){
  6. arr1[i] = {}
  7. arr1[i] = obj1
  8. return arr1
  9. }
  10. arr1.push(obj1)
  11. }
  12. //如果有就替换 没有就插入
  13. if( flag ) {
  14. arr1.splice(index,1,obj1)
  15. } else {
  16. arr1.push(obj1)
  17. }
  18. }

对象数据合并

  1. const merge = (...objs) =>
  2. [...objs].reduce(
  3. (acc, obj) =>
  4. Object.keys(obj).reduce((a, k) => {
  5. acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];
  6. return acc;
  7. }, {}),
  8. {}
  9. );
  10. // EXAMPLES
  11. const object = {
  12. a: [{ x: 2 }, { y: 4 }],
  13. b: 1
  14. };
  15. const other = {
  16. a: { z: 3 },
  17. b: [2, 3],
  18. c: 'foo'
  19. };
  20. merge(object, other); // { a: [ { x: 2 }, { y: 4 }, { z: 3 } ], b: [ 1, 2, 3 ], c: 'foo' }

二维数组转为一维数组

  1. const arr = [].concat.apply([], arr1.filter(item => item))

数组取交集

  1. // 方案一:只支持2个数据
  2. const arr = arr1.filter(item => arr2.indexOf(item) > -1)
  3. // 方案二:只支持2个数据
  4. [...a].filter(x => [...b].some(y => y.categoryId === x.categoryId))
  5. //或者:只支持2个数据
  6. Array.from(a).filter(x => Array.from(b).some(y => y.categoryId === x.categoryId))
  7. // 方案三: 可支持多个数组
  8. const listChunk = (list, size = 1, cacheList = [])=>{
  9. const tmp = [...list];
  10. if (size <= 0) {
  11. return cacheList;
  12. }
  13. while (tmp.length) {
  14. cacheList.push(tmp.splice(0, size));
  15. }
  16. return cacheList;
  17. }

数组取差集

  1. [...a].filter(x => [...b].every(y => y.categoryId !== x.categoryId))

数组去重

  1. 数组去重
  1. // 方案 定义一个临时数组,遍历原来的数组
  2. uniq (data) {
  3. var temp = [] // 一个新的临时数组
  4. for (var i = 0; i < data.length; i++) {
  5. if (temp.indexOf(data[i]) === -1) {
  6. temp.push(data[i])
  7. }
  8. }
  9. return temp
  10. }
  11. // 方案 二
  12. var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
  13. var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)
  14. console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]
  1. 数组对象去重
  1. arrObjRemoveRepeat(data) {
  2. let result = []
  3. for (let i = 0; i < data.length; i++) {
  4. let flag = true
  5. let temp = data[i]
  6. for (let j = 0; j < result.length; j++) {
  7. // 普通数组 (temp === result[j])
  8. if (temp !== undefined) {
  9. if (temp.n === result[j].n) {
  10. flag = false
  11. break
  12. }
  13. }
  14. }
  15. if (flag) {
  16. result.push(temp)
  17. }
  18. }
  19. return result
  20. }

JS 数组分组排序

数组过滤

  1. 去掉空数组空字符串、undefined、null
  1. var arr = ['1','2',undefined, '3.jpg',undefined]
  2. var newArr = arr.filter(item => item)
  3. console.log(newArr)
  4. var arr = ['1','2',null, '3.jpg',null]
  5. var newArr = arr.filter(item => item)
  6. console.log(newArr)
  7. >//空字符串里面不能包含空格
  8. var arr = ['1','2','', '3.jpg','']
  9. var newArr = arr.filter(item => item)
  10. console.log(newArr)
  1. 过滤不符合项
  1. var arr = ['10','12','23','44','42']
  2. var newArr = arr.filter(item => item.indexOf('2')<0)
  3. console.log(newArr)

文章摘自[https://www.cnblogs.com/lizhao123/p/9528124.html]

数组分组

  1. const chunkArr = (arr, size) =>
  2. Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
  3. arr.slice(i * size, i * size + size)
  4. )
  5. chunkArr(arr, 4)

JS 对象操作

  1. 判断对象是否为空
  1. var data = {};
  2. var arr = Object.keys(data);
  3. console.log(arr.length === 0);//true
  1. 数组中的多个对象合并为一个对象
  1. ## ES6
  2. Object.assign(...arr)
  3. ## 普通
  4. const obj = config.reduce((pre, cur, index) => {
  5. Object.keys(cur).forEach(key => pre[`${key}${index + 1}`] = cur[key])
  6. return pre
  7. }, {})
  1. 去除对象中为空或未指定值
  1. /**
  2. * null => ''
  3. * @param {*} data 要处理的数据
  4. */
  5. function null2str(data) {
  6. for (let x in data) {
  7. if (data[x] === null) { // 如果是null 把直接内容转为 ''
  8. data[x] = '';
  9. } else {
  10. if (Array.isArray(data[x])) { // 是数组遍历数组 递归继续处理
  11. data[x] = data[x].map(z => {
  12. return null2str(z);
  13. });
  14. }
  15. if(typeof(data[x]) === 'object'){ // 是json 递归继续处理
  16. data[x] = null2str(data[x])
  17. }
  18. }
  19. }
  20. return data;
  21. }
  22. let data = {id:1,name:null}
  23. console.log(null2str(data))
  24. for(attr in data){ //在遍历对象判断是null并且设置为想要的值
  25. if(data[attr]==="null")data[attr]='未记录'
  26. }
  27. console.log(data)

JS 字符串操作

去除字符串空格

  1. 正则匹配
  1. 去除字符串内所有的空格:str = str.replace(/\s*/g,"");
  2. 去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,"");
  3. 去除字符串内左侧的空格:str = str.replace(/^\s*/,"");
  4. 去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
  1. 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]

对象操作

对象合并

  1. Object.assign({}, {})
  2. // 或者复制对象
  3. Object.assign({},obj)

判断对象是否为空

  1. Object.keys(obj).length ===0 true

Input 输入限制

  1. 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();