美文网首页
一些非常有用的snippets

一些非常有用的snippets

作者: 风吹过的空气 | 来源:发表于2018-10-10 12:25 被阅读81次

求多重数组的最小值

const ary = (fn, n) => (...args) => fn(...args.slice(0, n));
const getMax = ary(Math.min);
[[2, 3, 4], [5, 67, 3], [20, 3]].map(x => getMax(...x)); // [2, 3, 3] 

setTimeout的第三个参数

const sum = (...args) => console.log(args.reduce((x, y) => x + y, 0));
setTimeout(sum, 1000, 1, 2, 4, 5, 6, 7); // 25 0 
// 相当于一秒钟之后打印出1 + 2 + 4 + 5 + 7的总和

取一堆字符串中的最小和最大值

const over = (...fns) => (...args) => fns.map(fn => fn.apply(null, args));
const minMax = over(Math.min, Math.max);
minMax(1, 2, 3, 4, 5); // [1, 5]

转译标签

const unescapeHTML = str => str.replace(/&|<|>|'|"/g, tag => ({
  '&': '$',
  '&lt;': '<',
  '&gt;': '>',
  '&#39': "'",
  '&quot;': '"'
}[tag] || tag));

unescapeHTML('1&lt;2, 3&gt;2'); // 1<2, 3>2

every some

  • 都只返回true或者false
const arr = [2, 2, 3, 4];
const all = (arr, fn = Boolean) => arr.every(fn);
const any = (arr, fn = Boolean) => arr.some(fn);
all(arr, x => x > 1); // true
any(arr, x => x > 3); // true

是否为数字

const isNumber = val => typeof val === 'number';
isNumber('1'); // false
isNumber(1); true

是否整除

const isDivisible = (dividend, divisor) => dividend % divisor === 0;
isDivisible(6, 3); // true

类数组

const isArrayLike = obj => obj !== null && typeof obj[Symbol.iterator] === 'function';
isArrayLike(document.querySelectorAll('.className')); // true
isArrayLike(null); // false
isArrayLike('abc'); // true

判断是否为空

const isEmpty = val => val === null || val === undefined || !(Object.keys(val) || val).length;
isEmpty({}); // true
isEmpty([]); // true
isEmpty(''); // true
isEmpty(new Set()); // true
isEmpty(undefined); // true
isEmpty(); // true

是否为浏览器

const isBrowser = () => ![typeof window, typeof document].includes('undefined');

是否为素数

素数:也称为质数,意为在大于1的自然数中,除了1和它本身以外不再有其他[因数]

const isPrime = num => {
  const boundary = Math.floor(Math.sqrt(num));
  for (let i = 2; i < boundary; i += 1) if (num % i === 0) return false;
return num >= 2;
}

斐波那契

const factorial = n =>
  n <= 1
  ? 1
  : n * factorial(n - 1);

factorail(6); // 720

chunk

const chunk = (arr, size) =>
  Array.from({ length: Math.ceil(arr.length / size) }, (v, i) => arr.slice(i * size, i * size + size));

chunk([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]];

深拷贝

const deepClone = obj => {
  let clone = Object.assign({}, obj);
  Object.keys(clone).forEach(key => (
    clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
  ));
  return Array.isArray(obj) ? (clone.length = obj.length) && Array.from(clone) : clone;
};

const a = {foo: 'bar', obj: {a: 1, b: 2}};
const b = deepClone(a); // {foo: 'bar', obj: {a: 1, b: 2}};

forOwn

const forOwn = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key, obj));
forOwn({foo: 'bar', a: 1}, v => console.log(v)); // 'bar', 1

mapValues

const mapValues = (obj, fn) => Object.keys(obj).reduce((acc, k) => {
  acc[k] = fn(obj[k], k, obj);
  return acc;
}, {});

const users = {
  fred: { user: 'fred', age: 40 },
  pebbles: { user: 'pebbles', age: 1 }
};
mapValues(users, u => u.age); // {fred: 40, pebbles: 1}

merge

const object = {a: 3, b: 4: c: 2};
const other = {a: 4, b: 4};
{...object, ...other} // {a: 4, b: 4, c: 2}



相关文章

网友评论

      本文标题:一些非常有用的snippets

      本文链接:https://www.haomeiwen.com/subject/gomvoftx.html