《学习JavaScript数据结构与算法》读书笔记1:数组以及数组之前

58 阅读5分钟

《学习JavaScript数据结构与算法》读书笔记

开篇几章是减少JavaScript基础,我不太感兴趣,略过,从我觉得重要的地方开始写

1.3.3真值假值

标题
数据类型转换成布尔值
undefinedfalse
nullfalse
+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
includesincludes 方法用于测试数组中是否包含特定的值。它接受一个参数,表示要搜索的值,并返回一个布尔值,表示该值是否在数组中。这个是搜索,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保持原来的顺序。

衍生可以如下使用
原书中例子

  1. 自定义排序
    我们可以对任何对象类型的数组排序,也可以创建 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)。