Skip to content

代码片段

Anagrams of string(带有重复项)

使用递归。对于给定字符串中的每个字母,为字母创建字谜。使用 map()将字母与每部分字谜组合,然后使用 reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于 2 或 1。

js
const anagrams = (str) => {
  if (str.length <= 2) return str.length === 2 ? [str, str[1] + str[0]] : [str];

  return str
    .split("")
    .reduce(
      (acc, letter, i) =>
        acc.concat(
          anagrams(str.slice(0, i) + str.slice(i + 1)).map(
            (val) => letter + val
          )
        ),
      []
    );
};
// anagrams('abc') -> ['abc','acb','bac','bca','cab','cba']

数组平均数

js
const average = (arr) => arr.reduce((acc, val) => acc + val, 0) / arr.length;

大写每个单词的首字母

js
const capitalizeEveryWord = (str) =>
  str.replace(/\b[a-z]/g, (char) => char.toUpperCase());
// capitalizeEveryWord('hello world!') -> 'Hello World!'

首字母大写,其他小写

js
const capitalize = (str, lowerRest = false) =>
  str.slice(0, 1).toUpperCase() +
  (lowerRest ? str.slice(1).toLowerCase() : str.slice(1));
// capitalize(‘myName’, true) -> ‘Myname’

检查回文

toLowerCase(),使用 replace()删除非字母字符

js
const palindrom = (str) => {
  const s = str.toLowerCase().replace(/[\W_]/g, "");
  return s === s.split("").r.everse().join("");
};
// palindrome('taco cat') -> true

数组中特定值的出现次数

js
const countOcccurrences = (arr, value) =>
  arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);
// countOccurrences([1,1,2,1,2,3], 1) -> 3

当前 URL

js
const currentUrl = (_) => window.location.href;
// currentUrl() -> 'https://google.com'

Curry

js
const curry=(fn.arity=fn.length,...args)=>
    arity<=args.length
    ?
    fn(...args)
    :
    curry.bind(null,fn,arity,...args);

// curry(Math.pow)(2)(10) -> 1024

// curry(Math.min, 3)(10)(50)(2) -> 2

Deep flatten array

js
const deepFlatten = (arr) =>
  arr.reduce((a, v) => a.concat(Array.isArray(v) ? deepFlatten(v) : v), []);

过滤数组的非唯一值

js
const filterMonUnique = (arr) =>
  arr.filter((i) => arr.indexOf(i) === arr.lastIndexOf(i));

最大公约数 GCD

js
const gcd = (x, y) => (!y ? x : gcd(y, x % y));

// gcd (8, 36) -> 4

范围内的随机整数

js
const randomIntegerInRange = (min, max) =>
  Math.floor(Math.random() * (max - min + 1)) + min;

// randomIntegerInRange(0, 5) -> 2

范围内的随机数

js
const randomInRange = (min, max) => Math.random() * (max - min) + min;

// randomInRange(2,10) -> 6.0211363285087005

验证数字

使用 isNaN 和 parseFloat()来检查参数是否是一个数字,使用 isFinite()来检查数字是否是有限的。

js
const validateNumber = (n) =>
  !isNaN(parseFloat(n)) && isFinite(n) && Number(n) == n;

// validateNumber('10') -> true

按字符串排序(按字母顺序排列)

js
const sortCharactersInString = (str) =>
  str
    .split("")
    .sort((a, b) => a.localeCompare(b))
    .join("");

// sortCharactersInString('cabbage') -> 'aabbceg'

参考

https://mp.weixin.qq.com/s/n3evJcci6I-ZtGCHERmBwQ