美文网首页
前端算法学习-前篇

前端算法学习-前篇

作者: 沉默紀哖呮肯伱酔 | 来源:发表于2020-05-20 13:23 被阅读0次

递归

JavaScript中允许函数递归调用,示例:

      function factorial(n){
          if( n === 1){
            return 1
          }else{
            return n*factorial(n-1)
          }
      }
    
    console.log(factorial(6))

当一个函数呗递归调用时,递归没有完成,函数的计算结果会被暂时挂起,
上例的执行过程如下:

6 * factoial(5)
6 * 5 * factoial(4)
6 * 5 * 4 * factoial(3)
6 * 5 * 4 * 3 * factoial(2)
6 * 5 * 4 * 3 * 2 * factoial(1)

数组

定义:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字。
数组的第一项下标是0
创建一个数组

let array = []

该数组的长度为0,

array.length // 0

也可以通过调用构造函数来创建数组

let array1 = new Array()

数组的读写

可以使用[]操作符将数据赋值给数组,将1~100的数字赋给一个数组 示例如下:

let num = []
for(let i = 0;i<100;i++){
  num[i] = i +1
}

可以读取数组中的元素

let num = [1,2,3,4,5,6,7]
console.log(num[4]) // 5

数组的常用方法:

  • indexOf()函数用来查找传进来的参数是否在目标数组中存在,如果存在就返回下标,如果不存在就返回-1
// indexOf()
let names = ["zhangsan","lisi"]
console.log(names.indexOf("zhangsan")) // 0
console.log(names.indexOf("wangwu")) // -1
  • join()和toString()方法可以将数组转成字符串
let names = ["zhangsan","lisi"]
let str1 = names.join()
console.log(str1) // zhangsan,lisi
let str2 = names.toString()
console.log(str2) // zhangsan,lisi
// 两个方法不同的是 join()方法可以传递参数,参数的意义是使用该参数链接数组的各个元素
let str3 = names.join("-")
console.log(str3) // zhangsan-lisi
  • concat() 该方法可以合并多个数组 创建一个新数组
let arr1 = [1,2,3]
let arr2 = [4,5,6]
let arr3 = [7,8]
let newArr = arr1.concat(arr2,arr3)
console.log(newArr) // [1,2,3,4,5,6,7,8]
  • splice()方法可以从现有数组里截取一个新数组,该方法的第一个参数是截取的起始索引,第二个参数是截取的长度, 第三个参数是添加的元素
let arr = [1,2,3,4,5,6,7,8]
let arr1 = arr.splice(2,3)
console.log(arr1) // [3,4,5]
console.log(arr) // [1,2,6,7,8]
  • push() 该方法用于向数组尾部中添加元素
let arr = [1,2,3]
arr.push(4)
console.log(arr) // [1,2,3,4]
  • unshift()该方法用于向数组开头添加元素
let arr = [1,2,3]
arr.unshift(4)
console.log(arr) // [4,1,2,3]
  • pop() 方法用于删除数组尾部的元素
let arr = [1,2,3]
arr.pop()
console.log(arr) // [1,2]
  • reverse()该方法可以将数组翻转
let arr = [1,2,3]
arr.reverse()
console.log(arr) // [3,2,1]
  • sort() 该方法用于数组的排序
let arr = [1,2,8,4,5,7,89,32,5]
arr.sort((a,b)=> a-b)
console.log(arr) // [1, 2, 4, 5, 5, 7, 8, 32, 89]
  • forEach()该方法接受一个函数作为参数,对数组中的每一个元素使用该方法
let arr =  [1, 2, 4, 5, 5, 7, 8, 32, 89]
arr.forEach((item)=>{
  console.log(item)
})
// 打印数组的每一项
  • every()方法接受一个返回值为布尔值的函数,对数组中的每个元素使用该函数,如果对于所有元素该方法都返回true,该方法就返回true,否则返回false
let arr =  [1, 2, 4, 5, 5, 7, 8, 32, 89]
let result = arr.every((item)=>{
    return  item > 0
})
console.log(result) // true
  • some() 方法接受一个返回值为布尔值的函数,只要有一个元素使得该函数为true,该方法就返回true
let arr =  [1, 2, 4, 5, 5, 7, 8, 32, 89]
let result = arr.every((item)=>{
    return  item > 5
})
console.log(result) // true
  • reduce() 方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,知道数组的最后一个元素,最后返回累加值.(对数组求和)
let arr =  [1, 2, 4, 5, 5, 7, 8, 32, 89]
const result = arr.reduce((pre,next) =>pre+next,0)
console.log(result) // 153
  • map()该方法和forEach类似,map和forEach方法不能跳出循环,for of可以

  • filter()该方法接受一个函数,对数组的每一个元素调用该函数,返回一个新的数组,不改变原数组。起到对原数组进行过滤的作用

let arr =  [1, 2, 4, 5, 5, 7, 8, 32, 89]
let arrNew = arr.filter((item)=>item > 5)
console.log(arrNew) // [7, 8, 32, 89]

相关文章

网友评论

      本文标题:前端算法学习-前篇

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