资讯专栏INFORMATION COLUMN

30-seconds-code ——utility集合

Jochen / 2671人阅读

摘要:英文文章来源于返回参数列表中第一个非和的参数用实现返回第一个非参数返回一个用自定义函数中的函数是否返回来对中传入的参数列表尽心过滤用去遍历参数列表,用给定的函数的返回值来过滤参数列表返回给定值的基本类型返回给定值的构造函数名字的小

Utility

英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md

coalesce

返回参数列表中第一个非null和undefined的参数.

Array.find() 实现返回第一个非 null/undefined 参数.

const coalesce = (...args) => args.find(_ => ![undefined, null].includes(_))
// coalesce(null,undefined,"",NaN, "Waldo") -> ""
coalesceFactory

返回一个customCoalesce, 用自定义函数中的validate函数是否返回true来对customCoalesce中传入的参数列表尽心过滤.

Array.find()去遍历参数列表,用给定的validate函数的返回值来过滤参数列表.

const coalesceFactory = valid => (...args) => args.find(valid);
// const customCoalesce = coalesceFactory(_ => ![null, undefined, "", NaN].includes(_))
// customCoalesce(undefined, null, NaN, "", "Waldo") //-> "Waldo"
getType

返回给定值的基本类型.

返回给定值的构造函数名字的小写形式, 如果是"undefined" 或 "null",返回"undefined"或"null"

const getType = v =>
  v === undefined ? "undefined" : v === null ? "null" : v.constructor.name.toLowerCase();
// getType(new Set([1,2,3])) -> "set"
extendHex

将一个3位的HEX颜色值转化为6位的.

Array.map(), split()Array.join() 来实现.
如果HEX是以 #开始的,用String.slice()返回一个没有该字符的字符串.

const extendHex = shortHex =>
  "#" + shortHex.slice(shortHex.startsWith("#") ? 1 : 0).split("").map(x => x+x).join("")
// extendHex("#03f") -> "#0033ff"
// extendHex("05a") -> "#0055aa"
hexToRGB

转换HEX颜色为 rgb() ,如果alpha提供的化,转化为 rgba() .

用按位右移操作符(>>>)和掩码(&)操作符去转换3位进制的颜色为RGB颜色.

如果是三位进制的就先转化为标准的6位的. 如果在6位后指定 alpha 值, 则返回 rgba() .

const hexToRGB = hex => {
  let alpha = false, h = hex.slice(hex.startsWith("#") ? 1 : 0);
  if (h.length === 3) h = [...h].map(x => x + x).join("");
  else if (h.length === 8) alpha = true;
  h = parseInt(h, 16);
  return "rgb" + (alpha ? "a" : "") + "("
    + (h >>> (alpha ? 24 : 16)) + ", "
    + ((h & (alpha ? 0x00ff0000 : 0x00ff00)) >>> (alpha ? 16 : 8)) + ", "
    + ((h & (alpha ? 0x0000ff00 : 0x0000ff)) >>> (alpha ? 8 : 0))
    + (alpha ? `, ${(h & 0x000000ff)}` : "") + ")";
};
// hexToRGB("#27ae60ff") -> "rgba(39, 174, 96, 255)"
// hexToRGB("27ae60") -> "rgb(39, 174, 96)"
// hexToRGB("#fff") -> "rgb(255, 255, 255)"
RGBToHex

将RGB颜色转换为HEX颜色.

将RGB的颜色用操作符 (<<) 和 toString(16) 转换16进制的字符串, 然后 padStart(6,"0") 得到一个6位的HEX颜色

padStart() 是ES6中的新方法,定义字符串的格式,第一个参数是设定字符串的长度,第二个参数指定不足位置用什么来代替

const RGBToHex = (r, g, b) => ((r << 16) + (g << 8) + b).toString(16).padStart(6, "0");
// RGBToHex(255, 165, 1) -> "ffa501"
isArray

判断给定给定的值是否是否是数组.

Array.isArray() 判断给定的值是否为一个数组.

const isArray = val => !!val && Array.isArray(val);
// isArray(null) -> false
// isArray([1]) -> true
isBoolean

半段给定的值是否是一个基本的Boolean值.

typeof 判断一个值是否为一个基本的Boolean值.

const isBoolean = val => typeof val === "boolean";
// isBoolean(null) -> false
// isBoolean(false) -> true
isFunction

检查给定的值是否为一个函数.

typeof 判断给定的值是否为一个基本的函数类型.

const isFunction = val => val && typeof val === "function";
// isFunction("x") -> false
// isFunction(x => x) -> true
isNumber

判断给定的值是否为一个数字类型.

typeof 判断一个值是否为基本的数字类型.

const isNumber = val => typeof val === "number";
// isNumber("1") -> false
// isNumber(1) -> true
isString

判断给定的值是否为一个字符串.

typeof 判断给定的值是否为一个基本的字符串类型.

const isString = val => typeof val === "string";
// isString(10) -> false
// isString("10") -> true
isSymbol

判断给定的值是否为symbol类型.

typeof 判断给定的值是否为基本的symbol类型.

const isSymbol = val => typeof val === "symbol";
// isSymbol("x") -> false
// isSymbol(Symbol("x")) -> true
timeTaken

计算函数执行的时间.

console.time()console.timeEnd() 去计算从函数开始执行到执行结束所花费的时间.

const timeTaken = callback => {
  console.time("timeTaken");  const r = callback();
  console.timeEnd("timeTaken");  return r;
};
// timeTaken(() => Math.pow(2, 10)) -> 1024
// (logged): timeTaken: 0.02099609375ms
toDecimalMark

toLocaleString() 去转换浮点数,用逗号将数字分割成字符串的格式 Decimal mark.

const toDecimalMark = num => num.toLocaleString("en-US");
// toDecimalMark(12305030388.9087) -> "12,305,030,388.9087"
toOrdinalSuffix

为数字添加序号后缀.

用模操作符 (%) 取得指定值的个位和十分位的数值.然后找到相对应的序号与之匹配.
如果digit上没有找到,就用 tpattern

const toOrdinalSuffix = num => {
  const int = parseInt(num), digits = [(int % 10), (int % 100)],
    ordinals = ["st", "nd", "rd", "th"], oPattern = [1, 2, 3, 4],
    tPattern = [11, 12, 13, 14, 15, 16, 17, 18, 19];
  return oPattern.includes(digits[0]) && !tPattern.includes(digits[1]) ? int + ordinals[digits[0] - 1] : int + ordinals[3];
};
// toOrdinalSuffix("123") -> "123rd"
UUIDGenerator

生成 UUID.

crypto API生成UUID, 参考资料 RFC4122 version 4.

const UUIDGenerator = () =>
  ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
    (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
  );
// UUIDGenerator() -> "7982fcfe-5721-4632-bede-6000885be57d"
validateNumber

如果给定的值是数字类型,那么返回 true; 否则 false.

!isNaN 结合 parseFloat() 来判定给定的值是否是数字类型.
isFinite() 数字的长度是否有限.
Number() 去进行是否为数字的强迫检查.

const validateNumber = n => !isNaN(parseFloat(n)) && isFinite(n) && Number(n) == n;
// validateNumber("10") -> true

更多关于30-seconds-code中文翻译https://github.com/lvzhenbang/article/blob/master/js/30-seconds-code/index.md

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

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

相关文章

  • 30-seconds-code——adapter

    摘要:英文文章来源于给定一个键值和一组参数,但给定一个上下文时调用它们。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Adapter call 给定一个键值和一组参数,但给定一个上下文时调用它们。 使用闭包调用存储的键值与存储的参数 const call = ( key, ....

    dcr309duan 评论0 收藏0
  • 30-seconds-code——Object

    摘要:英文文章来源于删除对象中除指定键值的属性用递归的方法用方法遍历对象然后删除不是在给定数组中的属性如果你传入,它将对该键所对应的对象进行深度遍历的变形非原著作对所有的键对应的对象进行深度遍历用方法遍历对象然后删除不是在给定数组中的属性如 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/READM...

    lbool 评论0 收藏0
  • 30-seconds-code——string

    摘要:英文文章来源于计算一个字符串中字符的所有排序情况使用递归遍历字符串中的每个字符计算剩余字符串的所有顺序用区合并该字符和剩余字符串的每种顺序然后用将该字符串的所有顺序合并到一个数组中当字符串的等于或者时,是两个基例字符串的首字母大写用 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README...

    tinysun1234 评论0 收藏0
  • 30-seconds-code——array

    摘要:英文文章来源于数组最大公约数计算数字数组最大公约数用和运算式使用递归计算一个数字数组的最大公约数数组最小公倍数求数字数组的最小公倍数用和运算式使用递归计算一个数字数组的最小公倍数返回一个数组中的最大值。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Array 数组最大公...

    adie 评论0 收藏0
  • 30-seconds-code——browser

    摘要:显示所有指定的元素用操作符和清除所有指定元素的属性。使用了两个事件监听器。将指定的数组元素转换成元素标签,然后将它们插入指定的选择器元素内用和去生成一个元素标签列表复制一个字符串到剪切板。用去执行复制到剪切板。 英文文章来源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Browser...

    izhuhaodev 评论0 收藏0

发表评论

0条评论

Jochen

|高级讲师

TA的文章

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