锦峰将将

锦峰将将 查看完整档案

上海编辑  |  填写毕业院校  |  填写所在公司/组织 1256754123@qq.com 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

锦峰将将 赞了回答 · 2019-07-26

解决提醒功能如何制作?请看描述。

多个定时任务
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。

关注 4 回答 3

锦峰将将 赞了回答 · 2019-07-26

解决提醒功能如何制作?请看描述。

多个定时任务
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。

关注 4 回答 3

锦峰将将 赞了回答 · 2019-07-26

解决提醒功能如何制作?请看描述。

多个定时任务
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。

关注 4 回答 3

锦峰将将 关注了专栏 · 2019-05-31

CSS技术学习

CSS技术学习

关注 439

锦峰将将 关注了标签 · 2019-05-29

javascript

JavaScript 是一门弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程,被广泛用于 Web 开发。

一般来说,完整的JavaScript包括以下几个部分:

  • ECMAScript,描述了该语言的语法和基本对象
  • 文档对象模型(DOM),描述处理网页内容的方法和接口
  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

它的基本特点如下:

  • 是一种解释性脚本语言(代码不进行预编译)。
  • 主要用来向HTML页面添加交互行为。
  • 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。

JavaScript常用来完成以下任务:

  • 嵌入动态文本于HTML页面
  • 对浏览器事件作出响应
  • 读写HTML元素
  • 在数据被提交到服务器之前验证数据
  • 检测访客的浏览器信息

《 Javascript 优点在整个语言中占多大比例?

关注 172368

锦峰将将 发布了文章 · 2019-05-29

对于字符串中连续出现的字母进行递增,出现的数字进行递减

例子:字符串124346564abcd 输出43 65 abcd

具体实现:

str = "124346564abcd"
var num = str.match(/[0-9]/g)
var letter = str.match(/[a-z,A-Z]/g);

// let numberList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let numberList = [9,8,7,6,5,4,3,2,1,0]

let letterList = ['a', 'b', 'c', 'd', 'e']

// 找到第一个数字(字母)出现的位置
function findFirst(arr,num) {
  for (let index = 0; index < arr.length; index++) {
      if (arr[index] == num) { 
        return index
      }
    }
}
let startIndex = 0
if (num.length > 0) {
  // 在字典中的起始位置
   startIndex = findFirst(numberList, num[0])
}

// 数字结果
let numArr = []

// 处理数字
let indexNum = 0
function main(arr) {
  // 计数标识
  let numIndex = 0
  let result = ''
  for (let index = startIndex; index < numberList.length; index++) {
      if (numberList[index] == arr[indexNum]) {
        numIndex ++
        indexNum ++
        result += numberList[index]
      } else if (numIndex >= 2) {
        numArr.push(result)
        result = ''
        startIndex = index
        numIndex = 0
      } else { 
        startIndex = findFirst(numberList, arr[indexNum])
        result = ''
        numIndex = 0
        if (indexNum < arr.length) { 
          main(num)
        }
        break
      }
  }
}


let startIndexLetter = 0
if (letter.length > 0) {
  // 在字典中的起始位置
  startIndexLetter = findFirst(letterList, letter[0])
}
// 字母结果
let letterArr = []
// 处理字母
let indexLet = 0
function mainLetter(arr) {
  // 计数标识
  let numIndex = 0
  let result = ''
  for (let index = startIndexLetter; index < letterList.length; index++) {
    if (letterList[index] == arr[indexLet]) {
        numIndex ++
        indexLet ++
        result += letterList[index]
      } else if (numIndex >= 2) {
        letterArr.push(result)
        result = ''
        startIndexLetter = index
        numIndex = 0
    } else { 
        startIndexLetter = findFirst(letterList, arr[indexLet])
        if (indexLet < arr.length) { 
          mainLetter(letter)
        }
        break
      }
  }
}


if (num && num.length>0) { 
  main(num)
  console.log(numArr);
}

if (letter&&letter.length>0) { 
  mainLetter(letter)
  console.log(letterArr);
}

这种方法不好,各位要是有好的方法请告知

查看原文

赞 1 收藏 1 评论 5

锦峰将将 赞了文章 · 2019-05-10

JS 四则运算精度丢失解决方案

相信绝大部分js开发者遇见过这个问题,原理很多文章都有解释,我这就不多说了,直接上解决方案的代码。

代码:

    //加法   
    Number.prototype.add = function(arg){   
        var r1,r2,m;   
        try{r1=this.toString().split(".")[1].length}catch(e){r1=0}   
        try{r2=arg.toString().split(".")[1].length}catch(e){r2=0}   
        m=Math.pow(10,Math.max(r1,r2))   
        return (this.mul(m) + arg.mul(m)) / m;   
    }  
    
    //减法   
    Number.prototype.sub = function (arg){   
        return this.add(-arg);   
    }   

    //乘法   
    Number.prototype.mul = function (arg)   
    {   
        var m=0,s1=this.toString(),s2=arg.toString();   
        try{m+=s1.split(".")[1].length}catch(e){}   
        try{m+=s2.split(".")[1].length}catch(e){}   
        return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)   
    }   

    //除法   
    Number.prototype.div = function (arg){   
        var t1=0,t2=0,r1,r2;   
        try{t1=this.toString().split(".")[1].length}catch(e){}   
        try{t2=arg.toString().split(".")[1].length}catch(e){}   
        with(Math){   
            r1=Number(this.toString().replace(".",""))   
            r2=Number(arg.toString().replace(".",""))   
            return (r1/r2)*pow(10,t2-t1);   
        }   
    }

这段代码是参考自JS 精度问题,然而这代码还有点小瑕疵,经过小修改后如上。
经过亲测是没什么问题的,大家可以自由测试下。
若该文章解决了你碰到的问题,请点个赞~哈哈

调用方法如下:

如: 0.1+0.2,2.22+0.1,2480-2479.99

0.1.add(0.2);
2.22.add(0.1);
2480.sub(2479.99);
查看原文

赞 3 收藏 6 评论 2

锦峰将将 赞了文章 · 2019-05-10

js数字计算丢失精度问题解决方案

计算机世界里,数字的计算,所有语言都会丢失精度,所以没有万全之策,但在人力范围内,尽量解决。

网上找了一部分代码,发现是有问题的,比如:

//加法 
Number.prototype.myAdd = function(arg2) {
    var arg1 = this;
    if (isNaN(arg2)) {
        return arg2;
    }
    var r1, r2, m;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m
}
//减法 
Number.prototype.mySub = function(arg2) {
    var arg1 = this;
    if (isNaN(arg2)) {
        return arg2;
    }
    var r1, r2, m, n;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2));
    n = (r1 >= r2) ? r1 : r2;
    return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
//乘法 
Number.prototype.myMul = function(arg2) {
    var arg1 = this;
    if (isNaN(arg2)) {
        return arg2;
    }
    var m = 0,
        s1 = arg1.toString(),
        s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) {}
    try { m += s2.split(".")[1].length } catch (e) {}
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}

// 除法
Number.prototype.myDiv = function(arg2) {
    var arg1 = this;
    if (isNaN(arg2)) {
        return arg2;
    }
    var t1 = 0,
        t2 = 0,
        r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) {}
    try { t2 = arg2.toString().split(".")[1].length } catch (e) {}
    with(Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
        return (r1 / r2).myMul(pow(10, t2 - t1))
    }
}

在计算一些特殊的数字时,仍然有问题:
比如加法:

268.34.myDiv(0.83);//321.7505995203837

所以还要优化

我重新做了一版:

var operationNumber = function (arg1,arg2,operator) {
    var oper=['+','-','*','/'];
    // 不合法的运算
    if (isNaN(arg1)||isNaN(arg2)||oper.indexOf(operator)<0) {
        return NaN;
    }
    // 除以0
    if (operator==='/'&&Number(arg2)===0) {
        return Infinity;
    }
    // 和0相乘
    if (operator==='*'&&Number(arg2)===0) {
        return 0;
    }
    // 相等两个数字相减
    if ((arg1===arg2||Number(arg1)===Number(arg2))&&operator==='-') {
        return 0;
    }
    var r1, r2, max,_r1,_r2;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    max = Math.max(r1, r2)
    _r1 = max-r1;
    _r2 = max-r2;
    if (_r1!==0) {
        arg1=arg1+'0'.repeat(_r1)
    }
    if (_r2!==0) {
        arg2=arg2+'0'.repeat(_r2)
    }
    arg1 = Number(arg1.toString().replace('.',''))
    arg2 = Number(arg2.toString().replace('.',''))
    var r3 = operator==='*'?(max*2):(operator==='/'?0:max);
    var newNum = eval(arg1+operator+arg2);

    if (r3!==0) {
        var nStr = newNum.toString();
        nStr = nStr.replace(/^-/,'');
        if (nStr.length<r3+1) {
            nStr = '0'.repeat(r3+1-nStr.length)+nStr;
        }
        nStr = nStr.replace(new RegExp('(\\\d{'+r3+'})$'),'.$1');
        if (newNum<0) {
            nStr = '-'+nStr;
        }
        newNum = nStr*1;
    }
    return newNum;
}
//加法 
Number.prototype.myAdd = function(arg2) {
    return operationNumber(this,arg2,'+');
}
//减法 
Number.prototype.mySub = function(arg2) {
    return operationNumber(this,arg2,'-');
}
//乘法 
Number.prototype.myMul = function(arg2) {
    return operationNumber(this,arg2,'*');
}
// 除法
Number.prototype.myDiv = function(arg2) {
    return operationNumber(this,arg2,'/');
}

如果你发现了bug,评论区及时反馈,我及时跟进修复

查看原文

赞 15 收藏 11 评论 2

锦峰将将 关注了专栏 · 2019-05-10

手摸手系列

手摸手带你学习前端系列

关注 1772

锦峰将将 回答了问题 · 2019-05-06

关于数组对象筛选问题 javascript

let arr = [
  { name: '测试一', code: '20001' },
  { name: '测试三', code: '20002' },
  { name: '测试六', code: '20003' },
  { name: '测试一', code: '20004' },
  { name: '测试三', code: '20005' },
  { name: '测试四', code: '20006' },
  { name: '测试六', code: '20007' },
  { name: '测试一', code: '20008' },
  { name: '测试三', code: '20009' },
]
var brr = {}
arr.forEach((item, index) => {
  if (brr[item.name]) {
    if (Array.isArray(brr[item.name].fund)) {
      var fund = [...brr[item.name].fund, item.code]
    } else {
      var fund = [brr[item.name].code, item.code]
    }
    brr[item.name] = { name: item.name, fund }

  } else {
    brr[item.name] = { name: item.name, code: item.code }
  }
  })
  var crr = Object.values(brr)
  let result = []
  crr.forEach((item, index) => { 
    if (item.fund) {
      let darr = []
      item.fund.forEach((itemF, indexF) => { 
        darr.push({code:itemF})
      })
      item.fund = darr
    } else { 
      item.fund = [{ code: item.code }]
      delete item.code
    }
    result.push(item)
  })

  console.log(result);

关注 4 回答 3

锦峰将将 回答了问题 · 2019-05-06

解决非工程化开发 iview slot-scope写法里 v-else报错

可以用template标签把i-input包裹起来使用

关注 2 回答 1

锦峰将将 回答了问题 · 2019-04-30

vue-admin-template后台模板关于登录问题

clipboard.png
直接把相应路由放进这个白名单里就行了

初学者不建议直接上手这种项目

关注 3 回答 3

锦峰将将 回答了问题 · 2019-04-30

vue+axios请求下载excel文件打开文件后显示undefined

export function exportExcelCb(content, fileName) {
    const blob = new Blob([content])
    if ('download' in document.createElement('a')) { // 非IE下载
        const elink = document.createElement('a')
        elink.download = fileName
        elink.style.display = 'none'
        elink.href = URL.createObjectURL(blob)
        document.body.appendChild(elink)
        elink.click()
        URL.revokeObjectURL(elink.href) // 释放URL 对象
        document.body.removeChild(elink)
    } else { // IE10+下载
        navigator.msSaveBlob(blob, fileName)
    }
}

这样调用试试

关注 9 回答 7

锦峰将将 回答了问题 · 2019-04-29

html 收银小票规则打印

不是js的print,是window对象的print,谷歌浏览器是把页面转为pdf格式进行打印,这个时候弹出的预览框的左边是可以设置打印属性的,设置过的打印属性默认保留,如果使用打印插件的话是可以设置打印小票规格,而且可以不弹出打印预览框

关注 2 回答 1

锦峰将将 回答了问题 · 2019-04-29

解决js如何实现从一个浏览器跳转到另一个浏览器

个人来说,直接操作不可行,换个思路,js检测当前浏览器类型,如果不是最佳选择,给出相应提示

关注 5 回答 5

锦峰将将 回答了问题 · 2019-04-29

解决在本地创建的文件夹,怎么和svn服务器关联上

这个新项目里没有.svn这个文件属性,你就不能commit,SVN服务器上的才有这个.svn文件,才可以执行commit操作,你描述的操作不可行

关注 3 回答 2

锦峰将将 回答了问题 · 2019-04-29

解决如何理解ES6中展开运算符是浅拷贝还是深拷贝

用扩展运算符对数组或者对象进行拷贝时,只能扩展和深拷贝第一层的值,对于第二层极其以后的值,扩展运算符将不能对其进行打散扩展,也不能对其进行深拷贝,即拷贝后和拷贝前第二层中的对象或者数组仍然引用的是同一个地址,其中一方改变,另一方也跟着改变。

关注 3 回答 3