Skip to content

Commit c7704c7

Browse files
committed
🎨 优化目录结构
1 parent 1a44443 commit c7704c7

File tree

11 files changed

+241
-225
lines changed

11 files changed

+241
-225
lines changed

docs/modules/code-chunk/1-new.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
> #### JavaScript在实例化一个对象,主要有几个步骤:
2+
> * 1. 创建一个新的空对象{}
3+
> * 2. 将空对象的 __proto__ 属性指向构造函数的prototype对象.
4+
> * 3. 使用新对象调用函数(通过call、apply等),函数中的this指向新实例对象
5+
> * 4. 返回新对象
6+
7+
代码实现:
8+
9+
```js
10+
function _news() {
11+
let result = {}
12+
const obj = [].shift.call(arguments)
13+
result.__proto__ = obj.prototype
14+
const n = obj.apply(result, arguments)
15+
return n instanceof Object ? n : result
16+
}
17+
18+
// 调用
19+
function Person(name) {
20+
this.name = name
21+
this.say = function () {
22+
console.log('this.name: ', this.name);
23+
}
24+
}
25+
_news(Person,'jeck',10).say()
26+
```

docs/modules/code-chunk/2-call.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
> #### call函数 其原理是利用了 JavaScript的上下文。(不同作用域this 指向不同)
2+
>
3+
4+
```js
5+
6+
Function.prototype.myCall = function(context) {
7+
let temp=Symbol('call'); //创建一个匿名函数,是为了防止context属性覆盖
8+
context= context || window; // this 上下文,无上下文默认指向 window
9+
context[temp]=this; //
10+
let args=[]
11+
for(let i=1; i<arguments.length; i++){
12+
args.push(arguments[i])
13+
}
14+
let result= context[temp](...args)
15+
delete context[temp]
16+
return result;
17+
}
18+
```

docs/modules/code-chunk/3-bind.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
> 和call apply 的作用很相似,唯一的区别就是绑定this 指向后,不会立即执行。
2+
3+
```js
4+
Function.prototype.myBind = function () {
5+
let that=this, thatArgs=arguments[0];
6+
let args = Array.prototype.slice.call(arguments, 1)
7+
if(typeof that !== 'function') {
8+
throw new TypeError('myBind callback is not a function');
9+
}
10+
return (function (){
11+
return that.apply(thatArgs, args);
12+
})
13+
}
14+
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
```js
2+
/**
3+
* 斐波拉契,求和
4+
* 0 1 2 3 5 8 13
5+
* @param n
6+
* @returns {*}
7+
*/
8+
function Fibonacci(n) {
9+
let val = new Array(n).fill(0) // 初始化数组长度为n,默认值为0
10+
val[1] = 1;
11+
val[2] = 2;
12+
for (let i = 3; i <= n; ++i) {
13+
val[i] = val[i - 1] + val[i - 2]
14+
}
15+
return val
16+
}
17+
18+
let count = Fibonacci(2).reduce(function (pre, current) {
19+
return pre + current
20+
})
21+
console.error('val=====>', count);
22+
23+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
> 从数组下标1 开始,每遍历一次,比较的元素在原基础上加1,越往后遍历次数越多。
2+
3+
插入排序图解
4+
5+
```js
6+
function insertSort (arr) {
7+
for (var i = 1;i < arr.length;i++){
8+
9+
for(var j = i;j > 0 && arr[j] < arr[j-1];j--){
10+
11+
// 当前值和之前的每个值进行比较,发现有比当前值小的值就进行交换
12+
let temp = arr[j]; //先取出 next 值,即 小的那个
13+
14+
arr[j] = arr[j-1];
15+
arr[j-1] = temp;
16+
}
17+
}
18+
return arr
19+
}
20+
21+
// 优化版 少一次赋值
22+
function insertSort(arr) {
23+
var len = arr.length;
24+
var temp;
25+
for (var i = 1; i < len; i++) {
26+
temp = arr[i]
27+
for (var j = i; j > 0 && temp < arr[j - 1]; j--) {
28+
// 当前值和之前的每个值进行比较,发现有比当前值小的值就进行重新赋值
29+
arr[j] = arr[j - 1];
30+
}
31+
arr[j] = temp;
32+
}
33+
return arr;
34+
}
35+
```
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
> 参见阮一峰的博客,很通俗易懂:
3+
> 快速排序(Quicksort)的Javascript实现 - 阮一峰的网络日志(www.ruanyifeng.com)
4+
> 思路如下:
5+
> * 1. 在数据集之中,选择一个元素作为"基准"(pivot)
6+
> * 2. 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
7+
> * 3. 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
8+
9+
```js
10+
function quickSort(array) {
11+
if (array.length <= 1) { return array }
12+
let left=[], right =[];
13+
14+
let middleIndex = Math.floor(array.length/2);
15+
16+
let middleValue= arr.splice(middleIndex,1)[0]
17+
18+
for (let index = 0; index < array.length; index++) {
19+
20+
if(array[index] < middleValue) {
21+
left.push (array[index])
22+
}else{
23+
right.push (array[index])
24+
}
25+
}
26+
return quickSort(left).concat([middleValue],quickSort(right))
27+
}
28+
```

docs/modules/code-chunk/7-tree.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
```js
3+
4+
/**
5+
* 递归查找指定节点的所有父级id
6+
* @param {*} data 树形数据
7+
* 树形数据 格式:
8+
* interface TreeItem {
9+
* title:string;
10+
* groupId:number;
11+
* children:TreeItem[]
12+
* }
13+
* data: {title, groupId, children:[]}
14+
* @param {*} id 当前子集id
15+
* @param {*} keyMap 键值映射
16+
* @param {*} [indexArray=[]] // 返回的父级ID集合
17+
* @returns
18+
*/
19+
function findParentIdOfTree (data, id, keyMap = { id: 'groupId', children: 'childrenList', text: 'groupName' }, indexArray = []) {
20+
const arr = Array.from(indexArray)
21+
for (let i = 0, len = data.length; i < len; i++) {
22+
23+
const childrenList = data[i][keyMap.children]
24+
const groupId = data[i][keyMap.id]
25+
const groupName = data[i][keyMap.text]
26+
27+
arr.push({ groupId, groupName })
28+
29+
if (groupId === id) {
30+
return arr
31+
}
32+
if (childrenList && childrenList.length) {
33+
const result = findParentIdOfTree(childrenList, id, keyMap, arr)
34+
if (result) {
35+
return result
36+
}
37+
}
38+
}
39+
return false
40+
}
41+
```

docs/modules/code-chunk/8-promise.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
```js
2+
3+
/**
4+
* promise延迟统一处理操作
5+
* @param promise 异步请求 promise
6+
* @param callback 状态更改的回调函数,如 () => this.setState({loading: false})
7+
* @param interval loading 最短时长
8+
*/
9+
export const extendExecutedTime = (promise, callback, interval = 600) => {
10+
const startTime = new Date().getTime();
11+
promise.finally(() => {
12+
const endTime = new Date().getTime();
13+
const executedTime = endTime - startTime;
14+
if (executedTime < interval) {
15+
setTimeout(() => {
16+
callback();
17+
}, interval - executedTime);
18+
} else {
19+
callback();
20+
}
21+
});
22+
23+
return promise;
24+
}
25+
26+
// 调用示例:
27+
const callback = () => { this.setLoading(false) };
28+
extendExecutedTime(promise, callback).catch(err => {
29+
console.log('err: ', err);
30+
});
31+
```

0 commit comments

Comments
 (0)