美文网首页
收集一些有用的代码片段

收集一些有用的代码片段

作者: mills_han | 来源:发表于2018-04-25 11:09 被阅读0次

在github上看到的一些有趣的代码片段,其中一些很有用处,自己也手敲了一遍,细心观察下你会发现‘竟然还能这么用!!!’ (代码中有简单的,也有复杂的例子)

斐波那契数组生成器

创建一个特定长度的空数组,初始化前两个值(0和1)。使用Array.reduce()向数组中添加值,后面的一个数等于前面两个数相加之和(前两个除外)。

const fibonacci = n =>
  Array(n).fill(0).reduce((acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i), []);
// fibonacci(5) -> [0,1,1,2,3]

过滤数组中的非唯一值

将Array.filter()用于仅包含唯一值的数组。

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

// filterNonUnique([1,2,2,3,4,4,5]) -> [1,3,5]
//我还是觉得使用new Set的方法更好

将多维数组合并位一个数组

使用reduce()来获取数组中的所有元素,并使用concat()来使它们flatten。

const flatten = arr => arr.reduce((a, v) => a.concat(v), []);
// flatten([1,[2],3,4]) -> [1,2,3,4]

范围内生成随机数字

利用Math函数

const randomInRange = (min, max) => Math.random() * (max - min) + min;
//// randomInRange(2,10) -> 6.0211363285087005

最大公约数(GCD)

使用递归。基本情况是当y等于0时。在这种情况下,返回x。否则,返回y的GCD和x / y的其余部分。

const gcd = (x, y) => !y ? x : gcd(y, x % y);
// gcd (8, 36) -> 4

阶乘

使用递归。如果n小于或等于1,则返回1。否则返回n和n - 1的阶乘的乘积。

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

计数数组中值的出现次数

每次遇到数组中的特定值时,使用reduce()来递增计数器。

@param1 要检索的数组
@param2 要检索的数字
const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
// countOccurrences([1,1,2,1,2,3], 1) -> 3

来自键值对的对象

使用Array.reduce()来创建和组合键值对。

const objectFromPairs = arr => arr.reduce((a, v) => (a[v[0]] = v[1], a), {});
// objectFromPairs([['a',1],['b',2]]) -> {a: 1, b: 2}

相关文章

网友评论

      本文标题:收集一些有用的代码片段

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