学习JavaScript数据结构与算法 - 阅读笔记

avatarplhDigital nomad

前言

感觉有点问题,最近好像停止学习了。所以还是继续看书吧,老是想写出个什么来,却总没写出来。

第二章 数组

几乎所有的编程语言都支持数组类型,因为数组是最简单的内存数据存储结构,数组可以存储一种数据类型的值。但是在JavaScript中,也可以存储不同的数据类型,但建议不要这么做。

2.1为什么用数组

假如有这样一个需求:保存所在城市内每个月的平均温度。这样写:

var averageTempJan = 31.9;
var averageTempFeb = 35.3;
var averageTempMar = 42.4;
var averageTempApr = 52.4;
var averageTempMay = 62.4;

真的不要太麻烦。

var averageTemp = [31.9, 35.3, 42.4, 52.4, 62.4];

这样是不是简单多了。

2.2 创建和初始化数组

JavaScript声明数组非常简单

var dayOfWeek = new Array(15)  // arr.length ===15
var dayOfWeek = new Array(1,2,3,4,5)  // arr.length ===15
var arr = new Array(1,2,3,4,5)
console.log(arr);

2.3 数组的API方法

unshift:在首位插入数据 shift:在首位删除数据 push:在末尾插入数据 pop:在末尾移除数据 splice:任意位置删除+添加数组 splice(3,2),在第三个位置删除后两个数据 concat:连接2个或者更多个数组,并返回结果 every:对每一项都返回true,则为true。 filter:对数组给定函数,过滤,,,,内部函数一般都接受3个参数,第一个是循环的数组,第二个是index,第三个是循环的数组本身。 forEach:对数组中每一项都运行,不返回任何值。 join:将所有字符串拼接成字符串 indexOf:返回某个数组索引,没有就返回-1 lastIndexOf:倒叙返回,如此对比上一个indexOf map:相比于forEach,会返回一个值。 reverse:倒序。 slice:剪切 some:对于数组中每一项运行给定函数,如果任意一项返回为true,则true。 sort:对数组排序 toString: 转化成字符串并且返回。 valueOf:类似toString,将数组作为字符串返回。

2.6.2 多维数组

var a = [[1,2,3],[4,5,6],[7,8,9]];

es6新增数组功能

@@iterator,返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组元素的键值对。 copyWithin:复制数组中一系列元素到同一个数组指定的起始位置。 entires:返回包含数组所有键值对的@@iterator includes:如果数组中存在某个元素,存在返回true,不存在返回false find:存在返回该对象 findIndex:存在返回该对象索引 fill:填充数组 keys:返回数组所有索引的@@iterator of:根据传入参数创建一个新数组 values:返回数组中所有值的@@iterator 除了上述还有for...of循环,返回迭代器对象

使用ES6新的迭代器

let arr = [1,2,4,5,6,6,7,89,9]
let itera = arr[Symbol.iterator]();
console.log(itera.next())  // 1
console.log(itera.next())  // 2
console.log(itera.next())  // 4
console.log(itera.next())  // 5
...
#### 关于entires,keys,values方法的迭代器
```js
let arr = [1,2,4,5,6,6,7,89,9]
let itera = arr.entries();
console.log(itera.next().value)  // [0,1]  [索引,值]
console.log(itera.next().value)  // [1,2]
console.log(itera.next().value)  // [2,4]
console.log(itera.next().value)  // [3,5]
...

同样道理,keys返回键值有迭代器,values返回值的数字,并且自带迭代器,不在不再熬述。