《学习JavaScript数据结构与算法》读书笔记
开篇几章是减少JavaScript基础,我不太感兴趣,略过,从我觉得重要的地方开始写
1.3.3真值假值
| 标题 | |
|---|---|
| 数据类型 | 转换成布尔值 |
| undefined | false |
| null | false |
| 数 | +0,-0和NaN都是false,其他都是true |
| 字符串 | 如果字符串长度为零,为false,其他都为true |
| 对象 | true |
迭代的意思
迭代(iteration)通常指的是重复执行一段代码,直到满足某个条件为止。这可以通过使用循环语句(如 for 循环和 while 循环)来实现。
3.7 JavaScript 的数组方法参考
| 标题 | |
|---|---|
| 方法 | 描述 |
| map | 对数组中的每个元素运行给定函数,返回每次函数调用的结果组成的数组 |
3.7.2 迭代器函数
reduce方法:
reduce 是一个 JavaScript 数组方法,它用于将数组中的所有元素归并为一个值。该方法接受两个参数:一个回调函数和一个初始值。回调函数接受四个参数:累加器、当前值、当前索引和原数组。reduce 方法会从左到右遍历数组中的每个元素,并对每个元素执行回调函数。每次执行回调函数时,都会将上一次执行的结果作为累加器传递给回调函数。
下面是一个简单的例子,它使用 reduce 方法来计算数组中所有元素的和:
let myArray = [1, 2, 3, 4, 5];
let sum = myArray.reduce(function(accumulator, currentValue) {
return accumulator + currentValue;
}, 0);
console.log(sum); // 输出: 15
在上面的代码中,我们定义了一个回调函数,它接受两个参数:累加器 accumulator 和当前值 currentValue。该函数返回两者之和。然后我们将这个回调函数和初始值 0 传递给 reduce 方法,并对数组 myArray 中的所有元素进行归并。最终,reduce 方法返回所有元素之和,即 15。
3.7.3 ECMAScript 6 和数组的新功能
ES2015和2016新增的数组方法:
| 标题 | ||
|---|---|---|
| 方法 | 描述 | |
| @@iterator | 返回一个包含数组键值对的迭代器对象,可以通过同步调用得到数组的键值对 | |
| copyWithin | 复制数组中一系列元素到同一数组指定的起始位置 | |
| entries | 返回包含数组所有键值对的@@iterator | |
| includes | includes 方法用于测试数组中是否包含特定的值。它接受一个参数,表示要搜索的值,并返回一个布尔值,表示该值是否在数组中。 | 这个是搜索,some和every是迭代 |
| find | 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素 | 同上 |
| findIndex | 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素在数组中的索引 | 同上 |
| fill | 用静态值填充数组 | |
| from | 根据已有数组创建一个新数组 | |
| keys | 返回包含数组所有索引的@@iterator | |
| of | 根据传入的参数创建一个新数组 | |
| values | 返回包含数组中所有值的@@iterator |
4.from方法
Array.from方法根据已有的数组创建一个新数组。比如,要复制numbers可以这样做。
let numbers2 = Array.from(numbers);
还可以传入一个用来过滤值的函数,例子如下。
let evens = Array.from(numbers, x => (x % 2 == 0));
上面的代码会创建一个 evens 数组,以及值 true(如果在原数组中为偶数)或 false(如 果在原数组中为奇数)。
注释:
Array.from 方法可以从一个类数组或可迭代对象创建一个新的数组实例。
Array.from(numbers, x => (x % 2 == 0)) 这一行使用了 Array.from 方法的第二个参数,即映射函数。映射函数会对每个元素执行指定的操作,并返回一个新的数组,其中包含映射函数的返回值。
在这个例子中,映射函数是 x => (x % 2 == 0),它会对每个元素执行模运算,然后检查结果是否等于 0。如果等于 0,则返回 true;否则返回 false。因此,这一行代码会创建一个新的数组 evens,其中包含与原数组 numbers 中元素相对应的布尔值。如果原数组中的元素是偶数,则新数组中相应位置的元素为 true;否则为 false。
下面几个数组方法等到用到再看
3.7.4 排序元素
数组 sort方法
sort 是一个 JavaScript 数组方法,它用于对数组中的元素进行排序。该方法接受一个可选的比较函数作为参数。如果没有提供比较函数,sort 方法将按照字符编码的顺序对元素进行排序。如果提供了比较函数,则 sort 方法将使用该函数来确定元素的顺序。
下面是一个简单的例子,它使用 sort 方法来对数组中的数字进行升序排序:
let myArray = [3, 1, 4, 2, 5];
myArray.sort(function(a, b) {
return a - b;
});
console.log(myArray); // 输出: [1, 2, 3, 4, 5]
在上面的代码中,我们定义了一个比较函数,它接受两个参数 a 和 b,并返回它们之差。然后我们将这个比较函数传递给 sort 方法,并对数组 myArray 中的元素进行排序。最终,sort 方法将数组中的元素按照升序排列。这个比较函数用来确定数组元素的排序顺序。它应该接受两个参数,通常称为a和b,然后根据这些值返回0,大于0或小于0。如果返回值大于0,则a排在b之后;如果返回值小于0,则a排在b之前;如果返回值等于0,则a和b保持原来的顺序。
衍生可以如下使用
原书中例子
- 自定义排序
我们可以对任何对象类型的数组排序,也可以创建 compareFunction 来比较元素。例如, 对象 Person 有名字和年龄属性,我们希望根据年龄排序,就可以这么写。
const friends = [
{ name: 'John', age: 30 },
{ name: 'Ana', age: 20 },
{ name: 'Chris', age: 25 }, // ES2017 允许存在尾逗号
];
function comparePerson(a, b) {
if (a.age < b.age) {
return -1;
}
if (a.age > b.age) {
return 1;
}
return 0;
}
console.log(friends.sort(comparePerson));
在这个例子里,最后会输出 Ana(20), Chris(25), John(30)。