混乱地记录一些方法[持续更新]

2018-08-28  本文已影响0人  如意同学Try

时间戳 转为 时间格式

定义一个函数:
传入参数:new Date()创建的时间戳time,以及想要转化的格式fmt

function timeFormat(time, fmt) {
    if (typeof time === 'object') {
        if (!fmt) fmt = 'yyyy-MM-dd hh:mm:ss';
        var o = {
            'M+': time.getMonth() + 1, //月份
            'd+': time.getDate(), //日
            'h+': time.getHours(), //小时
            'm+': time.getMinutes(), //分
            's+': time.getSeconds(), //秒
            'q+': Math.floor((time.getMonth() + 3) / 3), //季度
            'S': time.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (time.getFullYear() + '').substr(4 - RegExp.$1.length));
        for (var 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;
    } else {
        return time || '';
    }
}

export { timeFormat };

调用

let data = new Date();
timeFormat(data, 'yyyy-MM-dd hh:mm:ss'); //2018-08-28 07:35

对象数组去重

数组去重的方法大家应该见了很多,而对象数组去重区别与一般数组,主要不同在于不能简单判断两个对象相等
如定义两个对象a和b,就算它们的值完全相等,由于指向的地址不同,a和b仍然是不相等的两组对象

let a =[{
  x: 1,
  y: 2
}]
let b = [{
  x: 1,
  y: 2
}]

Boolearn(a === b) //false

下面是对象数组去重方法,思路是将数组对象中的关键Key拿出,新建一个新的数组为Key的集合(确保这个Key为当前对象的唯一标识)。通过对Key的去重操作,得到整个数组对象的去重结果

uniqueArray(arr) {
    let newArr = [];
    let arrStr = arr.map(function(v) { return v.key })
    let newArrStr = newArr.map(function(v) { return v.key })
    for(var i = 0; i < arr.length; i++) {
       if (newArrStr.indexOf(arrStr[i]) < 0) {
          newArrStr.push(arrStr[i]);
          newArr.push(arr[i]);
        }
      }
    console.log(newArr);
    return newArr
}

当然这个方法的运用场合并不一般化,当你的数组对象中的对象代表一组信息,每组信息key不重复,且key不同则代表不同的信息,就可以使用上面的方法。标题链接博客中也是这种思路。不过在实际应用时,通常都会有一个唯一的id用于标识对象的唯一性。

更一般的写法还是应该去比较数组中每一个对象的每个键值对是否相等(待补充)

导出excel文件

https://www.cnblogs.com/cynthia-wuqian/p/7927621.html

axios({
        method: 'post',
        url: 'queryManage/exportQueryResult',
        data: con,
        responseType: 'arraybuffer'
      })
        .then(res => {
          this.download(res.data);
        })
        .catch(e => {
          console.log(e);
        });


  download(data) {
      if (!data) {
        return;
      }
      let url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.ms-excel' }));
      let link = document.createElement('a');
      link.style.display = 'none';
      link.href = url;
      link.setAttribute('download', '导出查询结果.xlsx');
      document.body.appendChild(link);
      link.click();
      URL.revokeObjectURL(link.href); // 释放URL对象
      document.body.removeChild(link);
    },
//get请求可以直接拼url
window.open(url)打开文件

@click.native

和@click的区别在于@click.native用在自定义组件上,触发的是原生click事件,而不是组件中定义的emit

上一篇下一篇

猜你喜欢

热点阅读