学习JavaScript数据结构与算法 (一)
学习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<arr.length;i++) {
arr[i] = arr[i+1]
}
console.log(arr) // [ 1, 2, 3, 4, 5, undefined ]
- 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 = 10
console.log(divideBy(10, 8))
console.log(num.toString(8))
学习JavaScript数据结构与算法 (一)的更多相关文章
- 学习JavaScript数据结构与算法 (二)
学习JavaScript数据结构与算法 的笔记 包含第四章队列, 第五章链表 本人所有文章首发在博客园: http://www.cnblogs.com/zhangrunhao/ 04队列 实现基本队列 ...
- 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述
定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(一)
定场诗 大将生来胆气豪,腰横秋水雁翎刀. 风吹鼍鼓山河动,电闪旌旗日月高. 天上麒麟原有种,穴中蝼蚁岂能逃. 太平待诏归来日,朕与先生解战袍. 此处应该有掌声... 前言 读<学习JavaScr ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈
定场诗 金山竹影几千秋,云索高飞水自流: 万里长江飘玉带,一轮银月滚金球. 远自湖北三千里,近到江南十六州: 美景一时观不透,天缘有分画中游. 前言 本章是重读<学习JavaScript数据结构 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读<学习JavaScript数据结构与算法-第三版>的系列文章,主要讲述队列数据 ...
- 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)
定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...
- 学习JavaScript数据结构与算法---前端进阶系列
学习建议 1.视频学习---认知 建议:在中国慕课上找"数据结构"相关的视频教程.中国大学MOOC 推荐清华大学.北京大学.浙江大学的教程,可先试看,然后根据自身的情况选择视频进行 ...
- 学习Javascript数据结构与算法(第2版)笔记(1)
第 1 章 JavaScript简介 使用 Node.js 搭建 Web 服务器 npm install http-server -g http-server JavaScript 的类型有数字.字符 ...
- 学习JavaScript数据结构与算法 2/15
第一章 JavaScript简介 js不同于C/C++,C#,JAVA,不是强类型语言. 通常,代码质量可以用全局变量和函数的数量来考量(数量越多越糟).因此,尽可能避免使用全局变量. JS数据类型 ...
随机推荐
- Mac版idea使用总结
1.设置文档注释快捷键:快捷键设置里搜索 Fix doc comment 2.IDEA不显示项目project视图(转载于 https://blog.csdn.net/oyimiyangguang12 ...
- Freemarker 中的哈希表(Map)和序列(List)
freemarlker中的容器类型有: 哈希表:是实现了TemplateHashModel或者TemplateHashModelEx接口的java对象,经常使用的实现类是SimpleHash,该类实现 ...
- 集群环境搭建-SSH免密码登陆(二)
1.打开sshd配置 命令: vi /etc/ssh/sshd_config 找到以下内容,并去掉注释符”#“ RSAAuthentication yes PubkeyAuthentication y ...
- C语言中的声明与定义的差别
1.对于以下的声明语句 int a; 假设其位置出如今全部的函数体之外,那么它就被称为外部对象a的定义.这个语句说明了a是一个外部整型变量,同一时候为a分配了存储空间.由于外部对象a并没 ...
- linux下自动创建设备文件节点---class
在驱动模块初始化函数中实现设备节点的自动创建 我们在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的 ...
- Do not throw System.Exception, System.SystemException, System.NullReferenceException, or System.IndexOutOfRangeException intentionally from your own source code
sonarqube的扫描结果提示 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/exceptions/creatin ...
- flywaydb and sql server
https://flywaydb.org/documentation/database/sqlserver How Flyway works https://flywaydb.org/getstart ...
- Android Studio运行出现项目 错误:非法字符:“\ufeff”
导入项目时,遇到编码问题. 主要原因是: eclipse可以自动把UTF-8+BOM文件转为普通的UTF-8文件,但Android Studio需要重新转换一下编码 解决方法: 将编码格式UTF-8+ ...
- MySQL性能优化-I/O相关配置参数
本文介绍InnoDB和MyISAM两种存储引擎的I/O相关参数配置. 1.InnoDB I/O相关配置 Innodb是一种事务型的存储引擎,为了减少提交事务时产生的io开销,innodb采用了写日志 ...
- 转:创建表空间,删除后再次创建,报错ORA-01119
原文:http://www.it2down.com/it-oracle-develop/57816.htm 我是个ORACLE新手,在删除了表空间,然后再创建怎么会提示出错? 删除表空间:drop t ...