0%
基础系列-模块化
基础系列-事件循环与异步
2021年工作总结
函数式编程
本文字数:
1k
阅读时长 ≈
2 分钟
在命令式编程中,我们按部就班地编写程序代码,详细描述要完成的事情以及完成的顺序。
函数式编程:
- 函数式编程的主要目标是描述数据,以及要对数据应用的转换。
- 在函数式编程中,程序执行顺序的重要性很低;而在命令式编程中,步骤和顺序是非常重要的。
- 函数和数据集合是函数式编程的核心。
- 在函数式编程中,我们可以使用和滥用函数和递归;而在命令式编程中,则使用循环、赋值、条件和函数。
- 在函数式编程中,要避免副作用和可变数据,意味着我们不会修改传入函数的数据。如果需要基于输入返回一个解决方案,可以制作一个副本并返回数据修改后的副本。
// 命令式编程与函数式编程区别
// 例如,迭代数组
// 命令式编程
const printArray = function(array) {
for (var i = 0; i < array.length; i++) {
console.log(array[i])
}
}
printArray([1, 2, 3, 4, 5])
// 函数式编程
const forEach = function(array, action) {
for (var i = 0; i < array.length; i++) {
action(array[i])
}
}
const logItem = function(item) {
console.log(item)
}
forEach([1, 2, 3, 4, 5], logItem)
map
、filter
、reduce
是**JavaScript
函数式编程的基础**。
数据结构与算法-算法设计
本文字数:
9.8k
阅读时长 ≈
16 分钟
数据结构与算法-随机
本文字数:
325
阅读时长 ≈
1 分钟
《学习JavaScript数据结构与算法(第3版)》
Fisher-Yates随机
迭代数组,从最后一位开始并将当前位置和一个随机位置进行交换。这个随机位置比当前位置小。这样,这个算法可以保证随机过的位置不会再被随机一次(洗扑克牌的次数越多,随机效果越差)。
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const randomIndex = Math.floor(Math.random() * (i + 1));
[array[randomIndex], array[i]] = [array[i], array[randomIndex]]
}
return array;
}
数据结构与算法-搜索
本文字数:
2.4k
阅读时长 ≈
4 分钟
《学习JavaScript数据结构与算法(第3版)》
顺序搜索
时间复杂度:O(n)
顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。
const DOSE_NOT_EXIST = -1;
function sequentialSearch(array, value, equalsFn = defaultEquals) {
for (let i = 0; i < array.length; i++) { // 迭代整个数组
if (enqualsFn(value, array[i])) { // 进行比较
return i; // 找到返回索引
}
}
return DOSE_NOT_EXIST; // 没有找到
}
function defaultEquals(a, b) {
return a === b;
}
数据结构与算法-排序
本文字数:
7k
阅读时长 ≈
12 分钟
《学习JavaScript数据结构与算法(第3版)》
算法图解参考连接
算法动态排序效果: https://www.toptal.com/developers/sorting-algorithms#
冒泡排序
时间复杂度:O(n^2)