1. // 1分页计算
  2. let pageSize = 10
  3. // 向上取整
  4. let index = 10
  5. const pageNo = Math.ceil((index + 1) / pageSize)
  6. console.log(pageNo)
  7. // 2数组的最大值
  8. const A = [1, 2, 3, 4]
  9. const max = Math.max(...A)
  10. console.log(max)
  11. // const max = Math.max.apply(null, A)
  12. // 3.20-30的随机整数
  13. let b = Math.round(20 + Math.random() * 10)
  14. console.log(b)
  15. // 4.判断一个数是不是素数
  16. // 素数就是一个 除了 0 和1 ,她两既不是素数,也不是合数
  17. // 然后判断他是不是除了1 和 自身,就不能被别的数整除了
  18. // 可以使用遍历,但是遍历所有就太多了,就先看他的平方根
  19. // 然后向下取整 就循环到这里就可以了
  20. function is_prime (n) {
  21. if (n <= 1) return false
  22. // 算平方根取值
  23. const N = Math.floor(Math.sqrt(n))
  24. let is_prime = true
  25. for (let i = 2; i <= N; i++) {
  26. if (n % i === 0) {
  27. is_prime = false
  28. break
  29. }
  30. }
  31. return is_prime
  32. }
  33. console.log(is_prime(13))

数组替换splice

image.png

map的使用

image.png

为什么这里要解构出来一个新的那?

我们希望 map映射出来的数组里的对象是一个全新的,和原来数据是没有关联的,要不直接在原来的值上去修改的话,原来的数组上就 突然多了一项 ,而且,有可能还会 改变 原数组

使用reduce进行分组

image.png

sort排序

image.png

怎么是升序,怎么是降序

sort return a-b 的话,返回值是升序 ,return b-a 的话 是降序

var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
fruits输出结果:
1,5,10,25,40,100
points.sort(function(a,b){return b-a});
fruits输出结果:
100,40,25,10,5,1

  1. // 5.括号匹配问题 栈的解法,就是先进先出
  2. // 给定一个表达式,中间只有[] 和() 判断表达式两边括号是不是平衡的,比如[(())]平衡,比如[()(()]不平衡
  3. // var [a, ...b] = 'asdasd'
  4. // a = 'a'
  5. // b = ["s", "d", "a", "s", "d"]
  6. function is_balance (str) {
  7. const [first, ...others] = str
  8. const stack = [first]
  9. while (others.length > 0) {
  10. const c = stack[stack.length - 1]
  11. // .shift() 从数组中删除第一个,返回值就是第一个 .pop() 从数组中删除最后一个,返回最后一个
  12. const n = others.shift()
  13. // 如果不匹配 就在添加一个 ,匹配的话,移除当前最后一个
  14. if (!match(n, c)) {
  15. stack.push(n)
  16. } else {
  17. stack.pop()
  18. }
  19. }
  20. // 如果当前最后剩余的结果集是空的就ok了
  21. return stack.length === 0
  22. }
  23. function match (n, c) {
  24. return (c === '[' && n === ']') || (c === '(' && n === ')')
  25. }
  26. console.log(is_balance('[()(()]'))
  27. // 6.数组去重
  28. let c = [...new Set(['a', 'b', 'b', 'c'])]
  29. console.log(c)
  30. // 7 写一个函数,给定一个函数,判断数组中的某一项,或者任意多项的和,是否可以被另一个整数整除
  31. // 相当于判断子数组的余数 和 solve([7,8,2],7) 相当于 solve([0,1,2],7)
  32. function solve (arr, num) {
  33. const s = new Set()
  34. for (let i = 0; i <= arr.length; i++) {
  35. for (let j = i + 1; j <= arr.length; j++) {
  36. const remain = arr.slice(i, j).reduce((x, y) => x + y, 0) % num
  37. s.add(remain)
  38. }
  39. }
  40. return s.has(0)
  41. }
  42. solve([3, 5, 8], 13) // true
  43. solve([3, 9], 15) // false
  44. solve([7, 8, 2], 7) // true
  45. solve([1, 2, 3], 6) // true
  46. // 最简单写法的拍平
  47. console.log(eval(`[${[1, [2, 3, [4]]] + ''}]`))
  48. // 生成器构造无穷斐波那契数列
  49. function* fibonacci () {
  50. let a = 1; b = 1
  51. yield a; yield b;
  52. while (true) {
  53. const t = b;
  54. b = a + b; a = t;
  55. yield b
  56. }
  57. }
  58. const it = fibonacci()
  59. const feb10 = Array.from(Array(10), it.next, it).map(x => x.value)
  60. console.log(feb10);

ramda 库

image.png

数组拍平 最简单写法:

eval([${[1, [2, 3, [4]]] + ''}])

迭代器和生成器

image.png

JS函数生成器,function* () {}**

  简单来说,用法如下:

function* fn() {
    console.log(1);
    //暂停!
    yield;
    //调用next方法继续执行
    console.log(2);
}
var iter = fn();
iter.next(); //1
iter.next(); //2

  1、函数生成器特点是函数名前面有一个‘*’
  2、通过调用函数生成一个控制器
  3、调用next()方法开始执行函数
  4、遇到yield函数将暂停
  5、再次调用next()继续执行函数

生成器的优势

image.png

迭代器的遍历

image.png