2024-11-16 日报 Day8

2024-11-16 日报 Day8

Yuyang 前端小白🥬

今日的鸡汤

心存希冀,目有繁星;
追光而遇,沐光而行。

今日学习内容

1、《JavaScript数据结构与算法》 P54-78

今日笔记

1、数据方法:

方法名 描述
concat 连接2个或更多数组,并返回结果
every 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
filter 对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
forEach 对数组中的每一项运行给定函数。这个方法没有返回值
join 将所有的数组元素连接成一个字符串
indexOf 返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1
lastIndexOf 返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
map 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
reverse 颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在 的第一个
slice 传入索引值,将数组里对应索引范围内的元素作为新数组返回
some 对数组中的每一项运行给定函数,如果任一项返回true,则返回true
sort 按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数
toString 将数组作为字符串返回
valueOf 和toString类似,将数组作为字符串返回
reduce array.reduce(callback, initialValue) callback接收四个参数 。accumulator:累加器,保存回调函数的返回值,并将其在下一次迭代中传递。currentValue:当前处理的数组元素。currentIndex:当前元素的索引(可选)。array:调用 reduce 的数组本身(可选)。

2、栈

栈实现

最简单的: 存在的缺点 希望Stack类的用户只能访问暴露给类的方法。否则,就有 可能从栈的中间移除元素(因为我们用数组来存储其值),这不是我们希望看到的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Stack {
constructor() {
this.items = []; // 用数组存储栈元素
}

// 入栈操作:添加一个元素到栈顶
push(element) {
this.items.push(element);
}

// 出栈操作:移除并返回栈顶元素
pop() {
if (this.isEmpty()) {
throw new Error("Stack is empty, cannot pop");
}
return this.items.pop();
}

// 查看栈顶元素
peek() {
if (this.isEmpty()) {
throw new Error("Stack is empty, no top element");
}
return this.items[this.items.length - 1];
}

// 检查栈是否为空
isEmpty() {
return this.items.length === 0;
}

// 获取栈的大小
size() {
return this.items.length;
}

// 清空栈
clear() {
this.items = [];
}
}

用ES6的限定作用域Symbol实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let _items = Symbol();
class Stack {
constructor () {
this[_items] = []; //{2}
}
//Stack方法
}
let stack = new Stack();
stack.push(5);
stack.push(8);
let objectSymbols = Object.getOwnPropertySymbols(stack);
console.log(objectSymbols.length); // 1
console.log(objectSymbols); // [Symbol()]
console.log(objectSymbols[0]); // Symbol()
stack[objectSymbols[0]].push(1);
stack.print(); //输出 5, 8, 1

虽然创建了一个symbol属性 但是依然可以获取到数组

用ES6的WeakMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const items = new WeakMap(); //{1}
class Stack {
constructor () {
items.set(this, []); //{2}
}
push(element) {
let s = items.get(this); //{3}
s.push(element);
}
pop() {
let s = items.get(this);
let r = s.pop();
return r;
}
//其他方法
}

数据结构总结

栈: 例子(书堆) 先进后出(LIFO)
方法包含: push、pop、peek、isEmpty、getSize、clear
应用: 回溯问题中,它可以存储访问过的任务或路径、撤销的操作(后
面的章节讨论图和回溯问题时,

此页目录
2024-11-16 日报 Day8