1.数据结构
1.1数组
1.1.1数组排序
//arr是一个数组
arr.sort(function(a,b){
return a-b //返回从小到大的数组
})
顺序 | 方法名 | 功能 | 返回值 | 是否改变原数组 |
---|---|---|---|---|
1 | push() | (在结尾)向数组添加一或多个元素 | 返回新数组长度 | Y |
2 | unshift() | (在开头)向数组添加一或多个元素 | 返回新数组长度 | Y |
3 | pop() | 删除数组的最后一位 | 返回被删除的数据 | Y |
4 | shift() | 移除数组的第一项 | 返回被删除的数据 | Y |
5 | reverse() | 反转数组中的元素 | 返回反转后数组 | Y |
6 | sort() | 以字母顺序(字符串Unicode码点)对数组进行排序 | 返回新数组 | Y |
7 | splice() | 在指定位置删除指定个数元素再增加任意个数元素 (实现数组任意位置的增删改) | 返回删除的数据所组成的数组 | Y |
8 | concat() | 通过合并(连接)现有数组来创建一个新数组 | 返回合并之后的数组 | N |
9 | join() | 用特定的字符,将数组拼接形成字符串 (默认",") | 返回拼接后的字符串 | N |
10 | slice() | 裁切指定位置的数组 | 被裁切的元素形成的数组 | N |
11 | toString() | 将数组转换为字符串 | 字符串 | N |
12 | valueOf() | 查询数组原始值 | 数组的原始值 | N |
13 | indexOf() | 查询某个元素在数组中第一次出现的位置 | 存在该元素,返回下标,不存在 返回 -1 | N |
14 | lastIndexOf() | 反向查询数组某个元素在数组中第一次出现的位置 | 存在该元素,返回下标,不存在 返回 -1 | N |
15 | forEach() | (迭代) 遍历数组,每次循环中执行传入的回调函数 | 无/(undefined) | N |
16 | map() | (迭代) 遍历数组, 每次循环时执行传入的回调函数,根据回调函数的返回值,生成一个新的数组 | 有/自定义 | N |
17 | filter() | (迭代) 遍历数组, 每次循环时执行传入的回调函数,回调函数返回一个条件,把满足条件的元素筛选出来放到新数组中 | 满足条件的元素组成的新数组 | N |
18 | every() | (迭代) 判断数组中所有的元素是否满足某个条件 | 全都满足返回true 只要有一个不满足 返回false | N |
19 | some() | (迭代) 判断数组中是否存在,满足某个条件的元素 | 只要有一个元素满足条件就返回true,都不满足返回false | N |
20 | reduce() | (归并)遍历数组, 每次循环时执行传入的回调函数,回调函数会返回一个值,将该值作为初始值prev,传入到下一次函数中 | 最终操作的结果 | N |
21 | reduceRight() | (归并)用法同reduce,只不过是从右向左 | 同reduce | N |
22 | includes() | 判断一个数组是否包含一个指定的值 | 是返回 true,否则false | N |
23 | Array.from() | 接收伪数组,返回对应的真数组 | 对应的真数组 | N |
24 | find() | 遍历数组,执行回调函数,回调函数执行一个条件,返回满足条件的第一个元素,不存在返回undefined | 满足条件第一个元素/否则返回undefined | N |
25 | findIndex() | 遍历数组,执行回调函数,回调函数接受一个条件,返回满足条件的第一个元素下标,不存在返回-1 | 满足条件第一个元素下标,不存在=>-1 | N |
26 | fill() | 用给定值填充一个数组 | 新数组 | Y |
1.2Map
let m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
//Map的使用
let m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined
1.3Set
let s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}
s.delete(3);
s // Set {1, 2, "3"}
1.4链表
生成一个链表
function listNode(val, next) {
this.val = val
this.next = next
}
let head=null,back=null
if(!back){
back=new ListNode(5)
head=back
}else{
back.next=new ListNode(5)
}
back=back.next
1.5二叉树
获取二叉树高度
var maxDepth = function(root) {
if (!root) { return 0 }
return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1
};
1.6优先队列
2. for...of...的使用
遍历Array
可以采用下标循环,遍历Map
和Set
就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable
类型,Array
、Map
和Set
都属于iterable
类型
let a = ['A', 'B', 'C'];
let s = new Set(['A', 'B', 'C']);
let m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (let x of a) { // 遍历Array
console.log(x);
}
for (let x of s) { // 遍历Set
console.log(x);
}
for (let x of m) { // 遍历Map
console.log(x[0] + '=' + x[1]);
}
for...of..和for...in...的区别
for ... in
循环将把name
包括在内,但Array
的length
属性却不包括在内
let a = ['A', 'B', 'C'];
a.name = 'Hello';
for (let x in a) {
console.log(x); // '0', '1', '2', 'name'
}
let a = ['A', 'B', 'C'];
a.name = 'Hello';
for (let x of a) {
console.log(x); // 'A', 'B', 'C'
}
3. 取整
向下取整
ans.floor()
向上取整
ans.ceil()
四舍五入
ans.round()
4. 创建二维及多维数组
注意:要用fill填充值
let arr=new Array(n).fill(0).map(()=>new Array(n).fill(0))
5. 获取ACSII码值
s.charCodeAt()
6. 切割字符串
s.substring(3,5) //切割下标 [3,5)