掌握 JavaScript 数组方法:了解如何操作和优化数组

news2024/11/25 13:36:30

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

      • 1. **push():** 在数组末尾添加一个或多个元素,并返回修改后的数组的新长度。
      • 2. **pop():** 删除并返回数组的最后一个元素。
      • 3. **shift():** 删除并返回数组的第一个元素。
      • 4. **unshift():** 在数组开头添加一个或多个元素,并返回修改后的数组的新长度。
      • 5. **concat():** 将多个数组或值合并为一个新数组,并返回新数组。
      • 6. **slice():** 返回选定数组的一部分,不会改变原数组。
      • 7. **splice():** 从数组中添加/删除元素,可以在指定位置添加或删除元素,并返回被删除的元素组成的新数组。
      • 8. **join():** 将数组中的所有元素转化为一个字符串,并使用指定的分隔符连接。
      • 9. **indexOf():** 返回数组中第一个与指定值相等的元素的索引位置,如果找不到,则返回 -1。
      • 10. **lastIndexOf():** 返回数组中最后一个与指定值相等的元素的索引位置,如果找不到,则返回 -1。
      • 11. **forEach():** 对数组中的每个元素执行提供的函数。
      • 12. **map():** 创建一个新数组,其中包含对原数组中的每个元素应用提供的函数的结果。
      • 13. **filter():** 使用提供的函数对数组中的每个元素进行测试,然后返回一个新数组,其中包含测试为真的元素。
      • 14. **reduce():** 使用提供的函数对数组中的所有元素进行累积计算,并将结果返回。
      • 15. **sort():** 对数组进行原地排序,默认按照字符串的 Unicode 码点进行排序。
      • 16. **reverse():** 颠倒数组中元素的顺序,第一个元素变为最后一个,最后一个变为第一个。

JavaScript 中的数组有许多常见的方法,可以对数组进行各种操作。以下是一些常见的数组方法:

1. push(): 在数组末尾添加一个或多个元素,并返回修改后的数组的新长度。

以下是使用 push() 方法向 JavaScript 数组添加元素的简单代码示例:

let array = [1, 2, 3];
console.log("原始数组:", array); // 输出: 原始数组: [1, 2, 3]

array.push(4); // 向数组末尾添加元素 4
console.log("添加元素后的数组:", array); // 输出: 添加元素后的数组: [1, 2, 3, 4]

array.push(5, 6); // 向数组末尾同时添加元素 5 和 6
console.log("再次添加元素后的数组:", array); // 输出: 再次添加元素后的数组: [1, 2, 3, 4, 5, 6]

以上代码示例创建了一个初始数组 [1, 2, 3]。然后使用 push() 方法向数组末尾添加元素。在第一个 push() 调用之后,数组变为 [1, 2, 3, 4]。第二个 push() 调用在数组末尾同时添加了两个元素,使数组变为 [1, 2, 3, 4, 5, 6]

你可以试着运行这段代码,以查看添加元素后数组的结果。

2. pop(): 删除并返回数组的最后一个元素。

以下是使用 pop() 方法从 JavaScript 数组中移除元素的代码示例:

let array = [1, 2, 3, 4, 5];
console.log("原始数组:", array); // 输出: 原始数组: [1, 2, 3, 4, 5]

let removedElement = array.pop(); // 移除数组末尾的元素并将其存储在变量中
console.log("移除的元素:", removedElement); // 输出: 移除的元素: 5

console.log("移除元素后的数组:", array); // 输出: 移除元素后的数组: [1, 2, 3, 4]

以上代码示例创建了一个初始数组 [1, 2, 3, 4, 5]。然后使用 pop() 方法从数组末尾移除一个元素。将移除的元素存储在变量 removedElement 中,这里是 5。最后,打印出移除元素后的数组,结果为 [1, 2, 3, 4]

你可以尝试运行这段代码,以查看移除元素后的数组和移除的元素的结果。

3. shift(): 删除并返回数组的第一个元素。

以下是使用 shift() 方法从 JavaScript 数组中移除元素的代码示例:

let array = [1, 2, 3, 4, 5];
console.log("原始数组:", array); // 输出: 原始数组: [1, 2, 3, 4, 5]

let removedElement = array.shift(); // 移除数组开头的元素并将其存储在变量中
console.log("移除的元素:", removedElement); // 输出: 移除的元素: 1

console.log("移除元素后的数组:", array); // 输出: 移除元素后的数组: [2, 3, 4, 5]

以上代码示例创建了一个初始数组 [1, 2, 3, 4, 5]。然后使用 shift() 方法从数组开头移除一个元素。将移除的元素存储在变量 removedElement 中。在这个例子中,被移除的元素是 1。移除元素后,数组变为 [2, 3, 4, 5]

你可以尝试运行这段代码,以查看移除元素后数组的结果。

4. unshift(): 在数组开头添加一个或多个元素,并返回修改后的数组的新长度。

以下是一个使用unshift方法的代码示例:

let arr = [1, 2, 3, 4, 5];
console.log("原始数组:", arr); // [1, 2, 3, 4, 5]

arr.unshift(0); // 在数组开头添加元素
console.log("使用unshift方法后的数组:", arr); // [0, 1, 2, 3, 4, 5]

arr.unshift(-2, -1); // 在数组开头添加多个元素
console.log("再次使用unshift方法后的数组:", arr); // [-2, -1, 0, 1, 2, 3, 4, 5]

在这个例子中,我们创建了一个包含数字1到5的数组arr。然后,我们使用unshift方法在数组开头添加了元素。首先使用unshift(0)将0添加到数组的开头,然后再次使用unshift(-2, -1)将-2和-1添加到数组的开头。最终的输出结果分别是[0, 1, 2, 3, 4, 5][-2, -1, 0, 1, 2, 3, 4, 5]

5. concat(): 将多个数组或值合并为一个新数组,并返回新数组。

以下是使用 concat() 方法将两个数组合并的 JavaScript 代码示例:

let array1 = [1, 2, 3];
let array2 = [4, 5, 6];

let concatenatedArray = array1.concat(array2);

console.log("合并后的数组:", concatenatedArray);
// 输出: 合并后的数组: [1, 2, 3, 4, 5, 6]

以上代码示例创建了两个数组 array1array2,分别包含 [1, 2, 3][4, 5, 6]。通过调用 concat() 方法,并传递另一个数组作为参数,将两个数组合并为一个新的数组 concatenatedArray。最后,打印输出合并后的数组 concatenatedArray,结果是 [1, 2, 3, 4, 5, 6]

你可以尝试运行以上代码,观察合并后的数组结果。

6. slice(): 返回选定数组的一部分,不会改变原数组。

以下是一个使用slice方法的代码示例:

let arr = [1, 2, 3, 4, 5];

// 使用slice方法复制数组
let copyArr = arr.slice();
console.log("复制的数组:", copyArr); // [1, 2, 3, 4, 5]

// 使用slice方法截取部分数组
let sliceArr = arr.slice(1, 4);
console.log("截取的数组:", sliceArr); // [2, 3, 4]

// 使用负数索引截取数组
let negativeSliceArr = arr.slice(-3);
console.log("负数索引截取的数组:", negativeSliceArr); // [3, 4, 5]

在这个例子中,我们创建了一个包含数字1到5的数组arr。然后,我们使用slice方法进行不同的操作。

首先,使用slice()复制整个数组,并将结果存储在copyArr变量中。通过这个操作,我们创建了一个与原始数组相同的新数组。

接着,使用slice(1, 4)截取了原始数组的索引1到索引3之间的部分,也就是数字2、3和4,并将结果存储在sliceArr变量中。

最后,使用slice(-3)使用负数索引截取了原始数组的最后三个数字,并将结果存储在negativeSliceArr变量中。

输出结果分别是[1, 2, 3, 4, 5][2, 3, 4][3, 4, 5]

7. splice(): 从数组中添加/删除元素,可以在指定位置添加或删除元素,并返回被删除的元素组成的新数组。

以下是使用 splice() 方法对 JavaScript 数组进行插入、删除和替换操作的代码示例:

let array = [1, 2, 3, 4, 5];

// 插入元素
array.splice(2, 0, 6); // 从索引 2 开始插入元素 6
console.log("插入元素后的数组:", array);
// 输出: 插入元素后的数组: [1, 2, 6, 3, 4, 5]

// 删除元素
array.splice(3, 1); // 从索引 3 开始删除 1 个元素
console.log("删除元素后的数组:", array);
// 输出: 删除元素后的数组: [1, 2, 6, 4, 5]

// 替换元素
array.splice(1, 2, 7, 8); // 从索引 1 开始删除 2 个元素,并插入元素 7 和 8
console.log("替换元素后的数组:", array);
// 输出: 替换元素后的数组: [1, 7, 8, 4, 5]

在以上代码示例中,我们创建了一个初始数组 [1, 2, 3, 4, 5]。然后使用 splice() 方法进行插入、删除和替换操作。

  • 插入元素:使用 array.splice(2, 0, 6) 表示从索引 2 处开始插入元素 6。结果是数组变为 [1, 2, 6, 3, 4, 5]
  • 删除元素:使用 array.splice(3, 1) 表示从索引 3 处删除 1 个元素。结果是数组变为 [1, 2, 6, 4, 5]
  • 替换元素:使用 array.splice(1, 2, 7, 8) 表示从索引 1 处开始删除 2 个元素,并在此位置插入元素 7 和 8。结果是数组变为 [1, 7, 8, 4, 5]

你可以尝试运行以上代码,观察插入、删除和替换元素后的数组结果。

8. join(): 将数组中的所有元素转化为一个字符串,并使用指定的分隔符连接。

以下是使用 join() 方法将数组元素连接成字符串的 JavaScript 代码示例:

let array = ["Hello", "World", "!"];

let joinedString = array.join(" ");
console.log("连接后的字符串:", joinedString);
// 输出: 连接后的字符串: Hello World !

在以上代码示例中,我们创建了一个包含三个元素的数组 array,其中包含字符串 “Hello”、“World” 和 “!”。然后使用 join() 方法将数组元素连接成一个字符串。

join() 方法接受一个可选的分隔符作为参数,用于在连接数组元素时分隔它们。在示例中,我们使用空格 " " 作为分隔符,通过 array.join(" ") 将数组元素连接成字符串,结果存储在 joinedString 变量中。

最后,通过打印输出 joinedString 可以看到连接后的字符串为 “Hello World !”。

你可以尝试修改分隔符或数组元素,然后运行以上代码,观察连接后的字符串结果。

9. indexOf(): 返回数组中第一个与指定值相等的元素的索引位置,如果找不到,则返回 -1。

以下是一个使用indexOf方法的代码示例:

let arr = ['apple', 'banana', 'orange', 'grape'];

// 使用indexOf方法查找元素的索引
console.log("apple的索引:", arr.indexOf('apple')); // 0
console.log("orange的索引:", arr.indexOf('orange')); // 2
console.log("watermelon的索引:", arr.indexOf('watermelon')); // -1

// 使用indexOf方法查找元素的索引,指定起始位置
console.log("banana的索引,从索引2开始查找:", arr.indexOf('banana', 2)); // -1
console.log("grape的索引,从索引1开始查找:", arr.indexOf('grape', 1)); // 3

在这个例子中,我们创建了一个字符串数组arr,包含了一些水果名称。

首先,我们使用indexOf方法来查找指定元素在数组中的索引。通过arr.indexOf('apple')查找'apple'在数组中的索引,输出结果为0,表示'apple'在数组中的第一个位置。

接着,我们使用arr.indexOf('orange')查找'orange'在数组中的索引,输出结果为2,表示'orange'在数组中的第三个位置。

然后,我们使用arr.indexOf('watermelon')查找'watermelon'在数组中的索引,输出结果为-1。由于数组中不存在'watermelon',因此返回-1表示未找到。

最后,我们使用indexOf方法可以选择传递第二个参数,来指定从哪个索引位置开始查找。通过arr.indexOf('banana', 2)从索引2开始查找'banana'的索引,输出结果为-1。由于从索引2开始之后的位置没有出现'banana',因此返回-1表示未找到。

再次使用arr.indexOf('grape', 1)从索引1开始查找'grape'的索引,输出结果为3,表示在索引3的位置找到了'grape'

请注意,indexOf方法返回首个匹配结果的索引值。如果要查找所有匹配结果的索引,可以使用循环遍历整个数组来实现。

10. lastIndexOf(): 返回数组中最后一个与指定值相等的元素的索引位置,如果找不到,则返回 -1。

以下是使用 lastIndexOf() 方法查找数组中最后一个匹配元素的索引的 JavaScript 代码示例:

let array = [1, 2, 3, 4, 2, 5];

let lastIndex = array.lastIndexOf(2);
console.log("最后一个匹配元素的索引:", lastIndex);
// 输出: 最后一个匹配元素的索引: 4

在以上代码示例中,我们创建了一个数组 array,其中包含多个数字元素,包括数字 2 出现了多次。然后使用 lastIndexOf() 方法查找数组中最后一个匹配元素的索引。

通过调用 array.lastIndexOf(2),我们查找元素 2 在数组中最后一次出现的位置。结果赋值给 lastIndex 变量。

最后,通过打印输出 lastIndex,可以看到最后一个匹配元素 2 的索引为 4。

你可以尝试修改数组中的元素,并使用 lastIndexOf() 方法查找数组中最后一个匹配元素的索引,并观察结果。

11. forEach(): 对数组中的每个元素执行提供的函数。

以下是一个使用forEach方法的代码示例:

let arr = [1, 2, 3, 4, 5];

// 使用forEach方法遍历数组并输出每个元素
arr.forEach(function(element) {
  console.log(element);
});

// 使用forEach方法遍历数组并修改每个元素
arr.forEach(function(element, index, array) {
  array[index] = element * 2;
});

console.log("修改后的数组:", arr); // [2, 4, 6, 8, 10]

在这个例子中,我们创建了一个包含数字1到5的数组arr

首先,使用forEach方法遍历数组并输出每个元素。通过arr.forEach(function(element) { ... }),我们定义了一个匿名函数作为forEach方法的参数,这个函数接收一个参数element,表示当前正在遍历的元素。在这个匿名函数内部,我们简单地通过console.log(element)输出每个元素。

接着,我们使用forEach方法遍历数组并修改每个元素。通过arr.forEach(function(element, index, array) { ... }),我们定义了一个匿名函数作为forEach方法的参数,这个函数接收三个参数。element表示当前正在遍历的元素,index表示当前元素的索引,array表示正在遍历的数组。在这个匿名函数内部,我们将每个元素乘以2,并将结果重新赋值给原来的数组元素array[index]

最后,我们通过console.log("修改后的数组:", arr)打印输出修改后的数组。输出结果为[2, 4, 6, 8, 10],表示每个元素都被修改成原来的两倍。请注意,forEach方法是原地修改数组的,不需要通过返回值来获取修改后的数组。

12. map(): 创建一个新数组,其中包含对原数组中的每个元素应用提供的函数的结果。

以下是使用 map() 方法对数组进行映射转换的 JavaScript 代码示例:

let numbers = [1, 2, 3, 4, 5];

let doubledNumbers = numbers.map((num) => num * 2);
console.log("数组映射后的结果:", doubledNumbers);
// 输出: 数组映射后的结果: [2, 4, 6, 8, 10]

在以上代码示例中,我们创建了一个包含多个数字的数组 numbers。然后使用 map() 方法对数组中的每个元素进行映射转换。

通过调用 numbers.map((num) => num * 2),我们将数组中的每个元素都乘以 2 进行映射转换。结果赋值给 doubledNumbers 变量。

最后,通过打印输出 doubledNumbers,可以看到数组经过映射转换后的结果为 [2, 4, 6, 8, 10],即每个元素都乘以了 2。

你可以尝试修改映射转换的逻辑或数组中的元素,并使用 map() 方法对数组进行自定义操作,并观察结果。

13. filter(): 使用提供的函数对数组中的每个元素进行测试,然后返回一个新数组,其中包含测试为真的元素。

以下是一个使用filter方法的代码示例:

let arr = [1, 2, 3, 4, 5];

// 使用filter方法筛选出大于2的元素
let filteredArr = arr.filter(function(element) {
  return element > 2;
});

console.log("筛选后的数组:", filteredArr); // [3, 4, 5]

在这个例子中,我们创建了一个包含数字1到5的数组arr

通过arr.filter(function(element) { ... })使用filter方法筛选数组元素。我们定义了一个匿名函数作为filter方法的参数,并传入当前正在遍历的元素作为参数element。在这个匿名函数内部,我们返回一个布尔值,表示是否保留当前元素。在本例中,我们返回element > 2,即保留大于2的元素。

将筛选后的结果保存在filteredArr变量中。

最后,我们通过console.log("筛选后的数组:", filteredArr)打印输出筛选后的数组。输出结果为[3, 4, 5],表示原数组中大于2的元素被筛选出来形成了新的数组。请注意,filter方法并不会修改原始数组,而是返回一个新的数组,该数组包含满足条件的元素。

14. reduce(): 使用提供的函数对数组中的所有元素进行累积计算,并将结果返回。

以下是使用 reduce() 方法对数组进行累积计算的 JavaScript 代码示例:

let numbers = [1, 2, 3, 4, 5];

let sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log("数组累加的结果:", sum);
// 输出: 数组累加的结果: 15

在以上代码示例中,我们创建了一个包含多个数字的数组 numbers。然后使用 reduce() 方法对数组进行累积计算。

通过调用 numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0),我们对数组中的每个元素进行累加计算。初始累加值通过参数 0 设置为 0。在回调函数中,accumulator 表示累加器(当前累加的结果),currentValue 表示当前遍历的数组元素。回调函数的返回值将作为下一次累加的结果。

最后,通过打印输出 sum,可以看到数组经过累加计算后的结果为 15,即数组中所有元素的和。

你可以尝试修改累加的初始值或累加计算的逻辑,并使用 reduce() 方法对数组进行自定义的累积计算,并观察结果。

15. sort(): 对数组进行原地排序,默认按照字符串的 Unicode 码点进行排序。

以下是使用 sort() 方法对数组进行排序的 JavaScript 代码示例:

let fruits = ['apple', 'banana', 'cherry', 'date'];

// 默认按照 Unicode 顺序排序
let sortedFruits = fruits.sort();
console.log("默认排序结果:", sortedFruits);
// 输出: 默认排序结果: [ 'apple', 'banana', 'cherry', 'date' ]

// 自定义排序函数,按照字符串长度进行升序排序
let sortedFruitsByLength = fruits.sort((a, b) => a.length - b.length);
console.log("按照长度排序结果:", sortedFruitsByLength);
// 输出: 按照长度排序结果: [ 'date', 'apple', 'banana', 'cherry' ]

在以上代码示例中,我们创建了一个包含多个水果名称的数组 fruits。然后使用 sort() 方法对数组进行排序。

默认情况下,调用 fruits.sort() 将以 Unicode 顺序对元素进行排序。结果存储在 sortedFruits 变量中。在示例中,我们可以看到默认排序结果为 ['apple', 'banana', 'cherry', 'date']

另外,我们也可以传递一个自定义的排序函数作为参数,以便根据特定条件进行排序。在示例中,我们定义了一个排序函数 (a, b) => a.length - b.length,它比较水果名称的长度并返回比较结果。通过 fruits.sort((a, b) => a.length - b.length) 我们可以按照字符串长度进行升序排序。结果存储在 sortedFruitsByLength 变量中,可以看到按照长度排序后的结果为 ['date', 'apple', 'banana', 'cherry']

你可以尝试修改排序函数的逻辑或数组中的元素,并使用 sort() 方法对数组进行自定义排序,并观察结果。

16. reverse(): 颠倒数组中元素的顺序,第一个元素变为最后一个,最后一个变为第一个。

以下是使用 reverse() 方法对数组进行反转的 JavaScript 代码示例:

let numbers = [1, 2, 3, 4, 5];

numbers.reverse();
console.log("反转后的数组:", numbers);
// 输出: 反转后的数组: [5, 4, 3, 2, 1]

在以上代码示例中,我们创建了一个包含多个数字的数组 numbers。然后使用 reverse() 方法对数组进行反转。

通过调用 numbers.reverse(),我们可以将数组元素的顺序反转。在示例中,使用 reverse() 方法对数组 numbers 进行反转。最终打印输出 numbers,可以看到数组经过反转后的结果为 [5, 4, 3, 2, 1]

你可以尝试修改数组中的元素,并使用 reverse() 方法对数组进行反转,并观察结果。注意,reverse() 方法会直接修改原始数组,而不会创建新的数组。

这只是一些常用的数组方法,JavaScript 还提供了很多其他强大的方法来操作数组。你可以参考 JavaScript 的文档或教程来了解更多数组方法及其用法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Logcat 命令行工具

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、日常用法3.1 面板介绍3.2 日志过滤…

零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频

有多个文件夹中的 视频,都要批量转换成音频格式。 转换完成后要删除视频。虽然现在已经有很多格式转换软件可以实现这个功能,但是需要一个个文件夹的操作,还要手动去删除视频。用ChatGPT来写一个批量自动操作程序吧: 输入提示词如…

获取el-select选中的下标

accountZbList:[ ]:下拉列表已通过接口获取数据 <el-row><el-col :span"12"><el-form-item label"账簙" prop"accountTook" class"itemzb"><el-select v-model"tableForm.accountTook" placeholder&…

软件测试基础学习

注意&#xff1a; 各位同学们&#xff0c;今年本人求职目前遇到的情况大体是这样了&#xff0c;开发太卷&#xff0c;学历高的话优势非常的大&#xff0c;公司会根据实际情况考虑是否值得培养&#xff08;哪怕技术差一点&#xff09;&#xff1b;学历稍微低一些但是技术熟练的…

改进的最大内切圆算法求裂缝轮廓宽度

前段时间我将网上最大内切圆算法进行了代码的整理&#xff0c;原先博主上传的代码稍微有点乱&#xff0c;可能也是它自己使用&#xff0c;大家可以看这篇整理好的&#xff1a;最大内切圆算法计算裂缝宽度。 最大内切圆算法详解 一个圆与给定的多边形或曲线的每一条边或曲线都…

13.(开发工具篇github)如何在GitHub上上传本地项目

一:创建GitHub账户并安装Git 二:创建一个新的仓库(repository) 三、拉取代码 git clone https://github.com/ainier-max/myboot.git git clone git@github.com:ainier-max/myboot.git四、拷贝代码到拉取后的工程 五、上传代码 (1)添加所有文件到暂存

PyTorch 模型性能分析和优化 — 第 1 部分

一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说&#xff0c;我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler&#xff0c;以及查看其结果的方法之一&#xff0c;即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型&#xff0c;尤其是…

江西广电会展集团总经理李悦一行莅临拓世科技集团调研参观,科技璀璨AIGC掀新潮

在江西这片充满活力的土地上&#xff0c;数字经济如潮水般涌动&#xff0c;会展文化与科技的完美结合&#xff0c;正如新时代的璀璨繁星照亮夜空&#xff0c;更预示着一场AIGC创新的壮丽篇章即将展开。作为拓世科技集团的老朋友&#xff0c;江西广电多位领导多次莅临拓世科技集…

【MATLAB源码-第40期】基于matlab的D*(Dstar)算法栅格路径规划仿真。

1、算法描述 D*算法路径规划 D*算法&#xff08;Dynamic A*&#xff09;是A*算法的一种变种&#xff0c;主要用于在地图中的障碍物信息发生变化时重新计算路径&#xff0c;而不需要从头开始。该算法适用于那些只有部分信息已知的环境中。 工作原理&#xff1a; 1. D*算法首先…

嵌入式Linux应用开发-第七章-RK3288和 RK3399的 LED驱动程序

嵌入式Linux应用开发-第七章-RK3288和 RK3399的 LED驱动程序 RK3288和 RK3399的 LED驱动程序7.3 RK3288和 RK3399的 LED驱动程序7.3.1 原理图7.3.1.1 fireflye RK3288的 LED原理图7.3.1.2 firefly RK3399的 LED原理图 7.3.2 所涉及的寄存器操作7.3.2.1 RK3288的 GPIO8_A1引脚7.…

探索ClickHouse——使用MaterializedView存储kafka传递的数据

在《探索ClickHouse——连接Kafka和Clickhouse》中&#xff0c;我们讲解了如何使用kafka engin连接kafka&#xff0c;并读取topic中的数据。但是遇到了一个问题&#xff0c;就是数据只能读取一次&#xff0c;即使后面还有新数据发送到该topic&#xff0c;该表也读不出来。 为了…

Ae 效果:CC Smear

扭曲/CC Smear Distort/CC Smear CC Smear &#xff08;CC 漩涡条纹&#xff09;可以将两点之间的源图像内容进行拉伸扭曲变形&#xff0c;形成一种类似油墨被涂抹或者柔体被拉扯之后的漩涡条纹效果。 ◆ ◆ ◆ 效果属性说明 From 从 漩涡条纹效果的起点。 默认为合成的中心。…

麒麟v10获取wwn

for i in cat /proc/partitions | awk {print $4} | grep sd do echo "Device: $i WWID: /usr/lib/udev/scsi_id --page0x83 --whitelisted --device/dev/$i" done | sort -k4

用于时间触发的嵌入式软件的IDE

TTE Systems的RapidiTTy IDE为希望创建“时间触发”微控制器软件以提高整体系统可靠性的开发人员提供了一个独立的环境。RapidiTTy&#xff08;下面的图1&#xff09;旨在解决深度嵌入的应用&#xff0c;包括医疗&#xff0c;国防&#xff0c;汽车和工业部门以及白色和棕色商品…

【Linux】Linux远程访问Windows下的MySQL数据库

1.建立Windows防火墙规则 首先需要开放windows防火墙&#xff0c;针对3306端口单独创建一条规则&#xff0c;允许访问。 打开windows安全中心防火墙与保护&#xff0c;点击高级设置 进入之后&#xff0c;点击入站规则&#xff0c;新建一条规则 新建端口入站规则 端口填写330…

【计算机网络】 基于TCP的简单通讯(客户端)

文章目录 流程伪代码代码实现加载库创建套接字连接服务端收发数据关闭套接字、卸载库 测试 流程伪代码 //1、加载库//2、创建套接字//3、连接服务端while(true){//4、发送数据//5、接收数据} //6、关闭套接字、卸载库代码实现 加载库 int err 0;WORD version MAKEWORD(2, 2…

表单控件拖拽平台都有哪些特点?

什么样的表单控件拖拽平台可以提升办公协作效率&#xff1f;在竞争激烈的当今社会&#xff0c;利用低代码技术平台的优势和特点&#xff0c;可以将企业内部的数据资源真正利用起来&#xff0c;帮助更多领域的客户朋友做出更有竞争优势的经营决策&#xff0c;实现数字化转型和流…

【Verilog 教程】6.3Verilog状态机

关键词&#xff1a;状态机&#xff0c;售卖机 有限状态机&#xff08;Finite-State Machine&#xff0c;FSM&#xff09;&#xff0c;简称状态机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具&#xff0c;而且…

0x23根据地址读取内存服务

诊断仪从ECU通过起始地址和内存大小空间来读取指定内存的数据&#xff0c;高地址范围未使用到的字节用0x00去填充。 请求报文格式 肯定响应报文形式

Makefile 优化编译速度

Makefile 优化编译速度 编写一个通用的 Makefile 模板&#xff0c;用来实现任意工程的编译管理架构搭建。 这里我主要有两种想法&#xff1a; 1. 用一个 Makefile 管理所有的文件。所有的文件都放到最顶层的 Makefile 中&#xff0c;一次性直接加载所有的 .c 文件完成编译。 …