博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习JavaScript数据结构与算法 (一)
阅读量:6800 次
发布时间:2019-06-26

本文共 1991 字,大约阅读时间需要 6 分钟。

  • 学习JavaScript数据结构与算法 的笔记, 包含一二三章
  • 本人所有文章首发在博客园:

01基础

循环

  • 斐波那契数列
var fibonaci = [1,1]for (var i = 2; i< 20;i++) {  fibonaci[i] = fibonaci[i-1] + fibonaci[i-2]}复制代码

02数组

添加和删除元素

  • push: 放到最后
  • pop: 取最后一个
  • unshift: 放到第一个
  • shifit: 取第一个
  • push 和 pop 模拟栈
  • unshift 和 pop 模拟队列
// 因为最后引用了一个i+1, 但是i已经是小于length的最小索引var arr = [0,1,2,3,4,5]for (var i = 0;i
  • pop和shift可以改变数组的长度
  • pop和shift不接受传参
  • spilce(index, length, ...补充的元素)取出数组中间的元素, 并返回
  • splice改变原数组

多维数组矩阵

数组常用方法

数组合并

  • concat: 可以合并多个数组
  • 参数如果是数组, 进行解析合并.
  • 如果不是数组, 例如对象, 函数, 或者其他类型的话, 会直接作为元素添加上去

迭代

  • map: 遍历返回新数组, 每一项由新的组成, 不改变原数组
  • forEach: 遍历数组, 没有返回结果, 不改变数组. 但是可以通过参数进行改变
  • some: 一项返回true, 就是true
  • every: 每一项都返回true, 才是true
  • filter: 返回一个返回值true的值, 组成的新数组
  • reduce: (pre, cur, index, arr) 每一项的结果向后叠加, 并返回新的操作结果

排序

  • reverse: 反转
  • sort, (a, b) 接受一个函数参数. 根据函数返回的结果, 返回负数, a>b, a在前面
var arr = [1, 5, 4]// a, b两个数相比较, 返回小于0的数的话, a 放到前面arr.sort((a, b) => {  return a - b})console.log(arr) [1,4,5]复制代码
  • 封装数组中是对象, 然后根据对象中的某个特定属性进行排列
var obj1 = {  age: 20}var obj2 = {  age: 10}var arr = [obj1, obj2]arr.sort(comp('age'))function comp(key) {  return (a, b) => {    return a[key] - b[key]  }}console.dir(arr)复制代码
  • 重点: 返回的小于0的话, 那么这个值就在前面.

搜索

  • indexOf
  • lastIndexOf

数组输出为字符串

  • join: 按照指定的字符拼接数组的每一项, 返回. 如果什么都不传的话, 就是toString
  • toString

03栈

后进先出, 也是编译器中保存遍历, 方法调用等的方式

实现栈

class Stack {  constructor () {    this.items = []  }  push(item) {    return this.items.push(item)  }  pop() {    return this.items.pop()  }  peek() {    return this.items[this.items.length - 1]  }  isEmpty() {    return this.items.length === 0  }  clear() {    return this.items = []  }  size() {    return this.items.length  }}复制代码

利用栈实现十进制转其他进制

  • 因为每一次取余后, 都是一次压栈操作, 放到最里面
  • 操作完成后, 是出栈操作, 也就是从最上面开始取
  • 按照顺序出栈, 拼接为字符串即可
function divideBy(num, base) {  var stack = new Stack, res = ''  while (num > 0) {    var rem = Math.floor(num % base)    stack.push(rem)    num = Math.floor(num / base)  }  while(!stack.isEmpty()) {    res += stack.pop()  }  return res}var num = 10console.log(divideBy(10, 8))console.log(num.toString(8))复制代码

转载地址:http://ccywl.baihongyu.com/

你可能感兴趣的文章
8月上旬全球增长最快域名商:万网第7 西部数码第12
查看>>
我国.NET域名74.6万居全球第3:1月第三周增1749个
查看>>
我国.BIZ域名总量5.3万居全球第7:1月第三周增425个
查看>>
4月第二周中国域名增5.7万再居第二 香港减461个
查看>>
8月国外最佳主机提供商TOP5:排名依旧 iPage夺冠
查看>>
TypeError: datetime is not JSON serializable
查看>>
我的友情链接
查看>>
下一代大数据处理引擎,阿里云实时计算独享模式重磅发布
查看>>
RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云
查看>>
Pyscripter为什么总报错?UnicodeEncodeError: 'ascii' codec
查看>>
linux内核之系统启动(二)
查看>>
IBM MQ 7.5开发版安装配置
查看>>
走出IT管理员与IT工程师的误区
查看>>
How-To Install ELK Stack(Elasticsearch, Logstash, and Kibana ) Success Version
查看>>
CentOS Linux服务器安全设置
查看>>
MySQL 5.5.x 单机多实例配置实践
查看>>
网络规划设计师-2011年下半年成绩
查看>>
PHP学习笔记【11】--PHP数组
查看>>
Hibernate N+1/1+N问题
查看>>
Nginx的反向代理及负载均衡
查看>>