资讯专栏INFORMATION COLUMN

提升开发幸福感的10条JS技巧

muddyway / 2796人阅读

摘要:作者陈大鱼头鱼头总结一些能够提高开发效率的技巧,这些技巧很实用,觉得挺好,想推荐给大家,所以有了这篇文章。如果此时正在看文章的你也有类似的技巧心得,不妨在下方留言来分享给大家。

作者:陈大鱼头

github: KRISACHAN

鱼头总结一些能够提高开发效率的JS技巧,这些技巧很实用,觉得挺好,想推荐给大家,所以有了这篇文章。

生成随机UID
const genUid = () => {
  var length = 20
  var soupLength = genUid.soup_.length
  var id = []
  for (var i = 0; i < length; i++) {
    id[i] = genUid.soup_.charAt(Math.random() * soupLength)
  }
  return id.join("")
}
genUid.soup_ = "!#$%()*+,-./:;=?@[]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
genUid() // ;l`yCPc9A8IuK}?N6,%}
无loop生成指定长度的数组
const List = len => [...new Array(len).keys()]
const list = List(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
一行代码去重数组
const list = [1, 1, 2, 3, 6, 45, 8, 5, 4, 6, 5]
const uniqueList = [...new Set(list)] // [1, 2, 3, 6, 45, 8, 5, 4]
RGB色值生成16进制色值
const rgb2Hex = rgb => {
    let rgbList = rgb.toString().match(/d+/g)
    let hex = "#"
    for (let i = 0, len = rgbList.length; i < len; ++i) {
      hex += ("0" + Number(rgbList[i]).toString(16)).slice(-2)
    }
    return hex
};
rgb2Hex("100, 50, 0") // "#643200"
颜色混合
const colourBlend = (c1, c2, ratio) => {
    ratio = Math.max(Math.min(Number(ratio), 1), 0)
    let r1 = parseInt(c1.substring(1, 3), 16)
    let g1 = parseInt(c1.substring(3, 5), 16)
    let b1 = parseInt(c1.substring(5, 7), 16)
    let r2 = parseInt(c2.substring(1, 3), 16)
    let g2 = parseInt(c2.substring(3, 5), 16)
    let b2 = parseInt(c2.substring(5, 7), 16)
    let r = Math.round(r1 * (1 - ratio) + r2 * ratio)
    let g = Math.round(g1 * (1 - ratio) + g2 * ratio)
    let b = Math.round(b1 * (1 - ratio) + b2 * ratio)
    r = ("0" + (r || 0).toString(16)).slice(-2)
    g = ("0" + (g || 0).toString(16)).slice(-2)
    b = ("0" + (b || 0).toString(16)).slice(-2)
    return "#" + r + g + b
}
colourBlend("#ff0000", "#3333ff", 0.5) // "#991a80"
判断是否为质数
const mathIsPrime = n => {
  if (n === 2 || n === 3) {
    return true
  }
  if (isNaN(n) || n <= 1 || n % 1 != 0 || n % 2 == 0 || n % 3 == 0) {
    return false;
  }
  for (let x = 6; x <= Math.sqrt(n) + 1; x += 6) {
    if (n % (x - 1) == 0 || n % (x + 1) == 0) {
      return false
    }
  }
  return true
}
mathIsPrime(0) // true
遍历类数组对象
const elements = document.querySelectorAll(selector);
[].prototype.forEach.call(elements, (el, idx, list) => {
    console.log(el) // 元素节点
})
判断对象类型
const type = data => Object.prototype.toString.call(data).replace(/^[object (.+)]$/, "$1").toLowerCase()
type({}) // object
优化多层判断条件
const getScore = score => {
    const scoreData = new Array(101).fill(0)
    .map((data, idx) => ([idx, () => (idx < 60 ? "不及格" : "及格")]))
    const scoreMap = new Map(scoreData)
    return (scoreMap.get(score) 
          ? scoreMap.get(score)() 
          : "未知分数")
}
getScore(30) // 不及格
时间格式化
const dateFormatter = (formatter, date) => {
    date = (date ? new Date(date) : new Date)
    const Y = date.getFullYear() + "",
          M = date.getMonth() + 1,
          D = date.getDate(),
          H = date.getHours(),
          m = date.getMinutes(),
          s = date.getSeconds()
    return formatter.replace(/YYYY|yyyy/g, Y)
                    .replace(/YY|yy/g, Y.substr(2, 2))
                    .replace(/MM/g, (M < 10 ? "0" : "") + M)
                    .replace(/DD/g, (D < 10 ? "0" : "") + D)
                    .replace(/HH|hh/g, (H < 10 ? "0" : "") + H)
                    .replace(/mm/g, (m < 10 ? "0" : "") + m)
                    .replace(/ss/g, (s < 10 ? "0" : "") + s)
}

dateFormatter("YYYY-MM-DD HH:mm", "1995/02/15 13:55") // 1995-02-15 13:55
后记

以上十个技巧都是我在日常开发中经常用到的一些代码片段,善用这些技巧,可以大大减少我们的开发时间。如果此时正在看文章的你也有类似的技巧心得,不妨在下方留言来分享给大家。





如果你、喜欢探讨技术,或者对本文有任何的意见或建议,你可以扫描下方二维码,关注微信公众号“鱼头的Web海洋”,随时与鱼头互动。欢迎!衷心希望可以遇见你。




文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/106150.html

相关文章

  • JS 中可以提升幸福技巧

    本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新~ 1. 类型强制转换 1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueOf方法)然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判断是否为NaN,因为 NaN !== NaN 32 * 1 // 32 ds * 1 ...

    tain335 评论0 收藏0
  • React开发提升幸福一些小技巧

    摘要:又一篇来自日常开发的汇总各位客官请对号入席,店小二逐一上菜。解决方案有很多种,例如把字符串数组等重组对象数组,每个元素设置一个唯一等。另外有个方式推荐使用生成唯一的数组,和数据数组一起使用,省去提交数据时再重组数组。 又一篇来自日常开发的汇总:各位客官请对号入席,店小二逐一上菜。 第一道菜:回锅肉 react数组循环,基本都会设置一个唯一的key,表格的对象数组循环一般没什么问题,数据...

    smartlion 评论0 收藏0
  • 【前端词典】提高福感 9 个 CSS 技巧

    摘要:使用归类重复样式和重复变量一样,重复的样式也可以归类。解决方案可以使用如下的写法两端对齐姓名手机号码账号密码效果如下相关文章输出计划最近总有朋友问我相关的问题,因此接下来我会输出篇相关的文章,希望对大家有一定的帮助。前言 在这篇文章我会介绍 9 个使你的 CSS 更加简洁优雅的使用技巧。这些技巧小生经常使用,觉得挺高效实用,所以也就有了这篇文章。 9 个 CSS 技巧 特此声明,这里说的...

    番茄西红柿 评论0 收藏0
  • 【前端词典】提高福感 9 个 CSS 技巧

    摘要:使用归类重复样式和重复变量一样,重复的样式也可以归类。解决方案可以使用如下的写法两端对齐姓名手机号码账号密码效果如下相关文章输出计划最近总有朋友问我相关的问题,因此接下来我会输出篇相关的文章,希望对大家有一定的帮助。前言 在这篇文章我会介绍 9 个使你的 CSS 更加简洁优雅的使用技巧。这些技巧小生经常使用,觉得挺高效实用,所以也就有了这篇文章。 9 个 CSS 技巧 特此声明,这里说的...

    mozillazg 评论0 收藏0
  • 前端方便面

    摘要:技术前端布局推进剂间距规范化利用变量实现令人震惊的悬浮效果很棒,但有些情况不适用布局说可能是最全的图片版学习网格布局使用的九大误区图解布局布局揭秘和中新增功能探索版本迭代论基础谈展望对比探究绘图中撤销功能的实现方式即将更改的生命周期几道高 技术 CSS 前端布局推进剂 - 间距规范化 利用CSS变量实现令人震惊的悬浮效果 Flexbox 很棒,但有些情况不适用 CSS布局说——可能是最...

    liaoyg8023 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<