当前位置: 首页 > article >正文

JavaScript 数组常用方法解析

1. concat - 合并数组

语法

const newArray = oldArray.concat(value1, value2, ..., arrayN);

作用

将当前数组与其他数组或值合并,返回一个新数组,原数组不变。

测试案例

const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const arr3 = arr1.concat(arr2, 6); // 合并 arr1、arr2 和数值 6
console.log(arr3); // 输出: [1, 2, 3, 4, 5, 6]
console.log(arr1); // 原数组不变: [1, 2, 3]

扩展:字符串连接

const newString = str1.concat(str2[, str3[, ...[, strN]]]);
  • str1:调用 concat 方法的原始字符串。
  • str2, str3, ..., strN:要连接到 str1 的字符串。
  • newString:连接后的新字符串。

测试案例

// 数组连接示例
const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const array3 = [7, 8, 9];
const combinedArray = array1.concat(array2, array3);
console.log(combinedArray); // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]// 包含非数组值的连接示例
const array4 = [10];
const combinedWithValue = array4.concat(11, [12, 13]);
console.log(combinedWithValue); // 输出: [10, 11, 12, 13]// 字符串连接示例
const string1 = "Hello";
const string2 = " ";
const string3 = "World";
const combinedString = string1.concat(string2, string3);
console.log(combinedString); // 输出: "Hello World"

2. map - 映射数组

介绍

map 方法会遍历调用它的数组中的每个元素,并对每个元素执行你提供的回调函数。然后,将回调函数的返回值组成一个新的数组并返回,而原数组不会被修改。这在需要对数组中的每个元素进行统一转换或处理时非常有用,比如对数组中的每个数字进行平方运算、将数组中的每个字符串转换为大写等。

语法

// 完整语法(带所有可选参数)
const newArray = 原数组. map( 回调函数(当前元素, [元素索引], [原数组]),  // 必传的回调函数(方括号内是可选参数)[指定回调函数中的this指向]  // 可选的this绑定(方括号表示可选)
);
  • 核心逻辑原数组 调用 map 方法,传入一个 必传的回调函数,最终返回一个新数组 newArray
  • 方括号 [] 的含义:表示该参数是 可选的,调用时可以省略(不是必须写)。
const newArray = arr.map(callback(currentValue[, index[, array]])[, thisArg])
  • arr:调用 map 方法的原数组。
  • callback:为数组中每个元素执行的函数,该函数接收三个参数:
    • currentValue:当前正在处理的数组元素。
    • index(可选):当前正在处理的元素的索引。
    • array(可选):调用 map 方法的数组本身。
  • thisArg(可选):执行 callback 函数时使用的 this 值。

⑴. 必传参数:回调函数 callback

回调函数是 map 的核心,它会对原数组的 每个元素 执行一次,接收 最多 3 个参数(后两个可选):

参数名含义是否必传示例中的体现(假设原数组是 [1,2,3]
currentValue当前正在处理的 元素值(比如第一个元素是 1,第二个是 2必传回调函数的第一个参数永远是它
index当前元素在 原数组中的索引(第一个元素索引是 0,第二个是 1可选不写时会被忽略,写了才能使用
array调用 map 的 原数组本身(即 arr 自己)可选很少用,需要操作原数组时才会用到

示例(只使用必传的 currentValue):

const numbers = [1, 2, 3];
const doubled = numbers.map(function (num) {  // num 就是 currentValuereturn num * 2;  // 每个元素乘以2,得到新数组 [2,4,6]
});

示例(同时使用 currentValue 和 index):

const words = ['a', 'b', 'c'];
const withIndex = words.map(function (word, index) {  // 第二个参数是索引return `${index}: ${word}`;  // 结果: ['0: a', '1: b', '2: c']
});

⑵. 可选参数:thisArg(绑定 this 指向)

  • 作用:在回调函数中指定 this 的值(很少用,了解即可)。
  • 示例(假设需要在回调中使用某个对象的属性):
const obj = { prefix: 'Item ' };
const numbers = [1, 2, 3];
const prefixed = numbers.map(function (num) {return this.prefix + num;  // this 在这里会指向 obj
}, obj);  // 第二个参数传入 obj,绑定回调中的 this
console.log(prefixed);  // 输出: ['Item 1', 'Item 2', 'Item 3']

总结:

语法

array.map(callback(element, index, array), thisArg);

作用
对数组每个元素执行回调函数,返回由回调结果组成的新数组,原数组不变。

测试案例

const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // 输出: [2, 4, 6]
console.log(numbers); // 原数组不变: [1, 2, 3]

3. forEach - 遍历数组

语法

array.forEach(callback(element, index, array), thisArg);

作用
遍历数组,为每个元素执行回调函数,无返回值(返回 undefined),原数组不变。
测试案例

const fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit, index) => {console.log(`${index}: ${fruit}`);
});
// 输出:
// 0: apple
// 1: banana
// 2: orange

4. reduce - 累计计算

reduce 方法用于将数组中的元素按顺序逐个处理,通过一个 累加器 累计计算结果,最终返回一个 单一值(可以是数字、字符串、数组、对象等)。

语法

array.reduce(callback(accumulator, currentValue, index, array), initialValue);
数组.reduce(回调函数(累加器, 当前值, 索引, 原数组), 初始值);

参数说明:

  1. 回调函数(必传)
    对数组中的每个元素执行的函数,接收 最多 4 个参数(后两个可选):

    • 累加器(accumulator)
      上一次回调函数的返回值,初始时是你传入的 初始值(见第 2 点),后续是每次计算的累计结果。
    • 当前值(currentValue)
      当前正在处理的数组元素(从第一个或第二个元素开始,取决于是否有初始值)。
    • 索引(index,可选)
      当前元素在原数组中的索引(如果有初始值,第一个元素的索引是 0;如果没有初始值,第一个元素的索引是 1,因为累加器会被赋值为数组的第一个元素)。
    • 原数组(array,可选)
      调用 reduce 方法的数组本身(很少用,按需使用)。
  2. 初始值(可选)
    累加器的 初始状态。如果不传入,默认以数组的 第一个元素 作为初始累加器,且从 第二个元素 开始处理;如果传入,会从 第一个元素 开始处理(累加器初始为你传入的值)。

测试案例

数组求和(最基础用法)

const numbers = [1, 2, 3, 4];
// 传入初始值 0,累加器从 0 开始,逐个加上当前值
const sum = numbers.reduce((acc, cur) => acc + cur, 0); 
console.log(sum); // 输出:10

合并数组(将二维数组转一维)

const arrays = [[1, 2], [3, 4], [5, 6]];
const merged = arrays.reduce((acc, cur) => acc.concat(cur), []); 
// 初始值是 [],每次把当前数组(cur)拼接到累加器(acc)中
console.log(merged); // 输出:[1, 2, 3, 4, 5, 6]

5.filter - 过滤数组

筛选出符合回调函数条件的元素,返回新数组,原数组不变。

array.filter(callback(element, index, array), thisArg);
数组.filter(回调函数(元素, 索引, 原数组), 【可选】指定回调中的this指向);

参数详解

必传参数:回调函数 callback

回调函数对原数组的每个元素执行一次,接收 最多 3 个参数(后两个可选),必须返回一个布尔值true 保留元素,false 排除元素):

参数名含义是否必传示例中的体现(假设原数组是 [1,2,3,4]
element当前正在处理的 元素值(比如第一个元素是 1,第二个是 2必传回调函数的第一个参数永远是它
index当前元素在 原数组中的索引(第一个元素索引是 0,第二个是 1可选不写时会被忽略,写了才能使用
array调用 filter 的 原数组本身(即 arr 自己)可选很少用,需要操作原数组时才会用到

 可选参数:thisArg(绑定 this 指向)

指定回调函数中 this 的值(实际开发中很少使用,了解即可)。

测试案例

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(n => n % 2 === 0);
console.log(evenNumbers); // 输出: [2, 4]
console.log(numbers); // 原数组不变: [1, 2, 3, 4, 5]

过滤出长度大于 3 的字符串

const words = ['apple', 'cat', 'banana', 'dog', 'watermelon'];
const longWords = words.filter(word => word.length > 3); 
// 回调函数检查字符串长度,保留长度大于 3 的元素
console.log(longWords); // 输出:['apple', 'banana', 'watermelon']

6. join - 拼接为字符串

语法

array.join(separator = ',');

作用
将数组元素按指定分隔符拼接为字符串,原数组不变。
测试案例

const fruits = ['apple', 'banana', 'orange'];
const str1 = fruits.join(); // 默认分隔符逗号
const str2 = fruits.join(' | '); // 自定义分隔符
console.log(str1); // 输出: "apple,banana,orange"
console.log(str2); // 输出: "apple | banana | orange"

7. find - 查找元素

语法

array.find(callback(element, index, array), thisArg);

作用
返回第一个符合回调条件的元素,若不存在则返回 undefined,原数组不变。
测试案例

const users = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' }
];
const user = users.find(u => u.id === 2);
console.log(user); // 输出: { id: 2, name: 'Bob' }

8. every - 检查所有元素

语法

array.every(callback(element, index, array), thisArg);

作用
判断所有元素是否都满足回调条件,返回布尔值,原数组不变。
测试案例

const numbers = [2, 4, 6, 8];
const allEven = numbers.every(n => n % 2 === 0); // 所有数都是偶数
console.log(allEven); // 输出: trueconst numbers2 = [2, 3, 4];
const allEven2 = numbers2.every(n => n % 2 === 0); // 存在奇数 3
console.log(allEven2); // 输出: false

9. some - 检查存在性

语法

array.some(callback(element, index, array), thisArg);

作用
判断是否至少有一个元素满足回调条件,返回布尔值,原数组不变。
测试案例

const numbers = [1, 3, 5, 7];
const hasEven = numbers.some(n => n % 2 === 0); // 不存在偶数
console.log(hasEven); // 输出: falseconst numbers2 = [1, 2, 3];
const hasEven2 = numbers2.some(n => n % 2 === 0); // 存在偶数 2
console.log(hasEven2); // 输出: true

10. sort - 数组排序(原地修改)

语法

array.sort(compareFunction);
数组.sort(【可选】比较函数(a, b));

参数详解

可选参数:比较函数 (a, b)

决定两个元素的排序顺序,接收两个参数 a 和 b(代表数组中两个待比较的元素),必须返回一个数值

  • 返回值 < 0a 排在 b 前面(升序)。
  • 返回值 = 0:保持 a 和 b 的相对顺序(稳定性,ES6 后保证稳定)。
  • 返回值 > 0b 排在 a 前面(降序)。

如果不传入比较函数,默认按 字符串 Unicode 码点 排序(对数字排序时会出错,见下方示例)。

核心特性:原地修改数组

const numbers = [3, 1, 2];
numbers.sort((a, b) => a - b); // 升序排序
console.log(numbers); // 原数组被修改为 [1, 2, 3]

常见使用场景示例

1. 数字数组升序 / 降序排序

const numbers = [3, 10, 1, 20, 2];// 升序(a - b:小的在前)
numbers.sort((a, b) => a - b);
console.log(numbers); // 输出:[1, 2, 3, 10, 20]// 降序(b - a:大的在前)
numbers.sort((a, b) => b - a);
console.log(numbers); // 输出:[20, 10, 3, 2, 1]

2. 字符串数组按字母顺序排序

const fruits = ['banana', 'apple', 'orange', 'grape'];// 按字母升序(默认规则可省略比较函数,但建议显式写出)
fruits.sort((a, b) => a.localeCompare(b)); // 更安全的字符串排序(考虑语言环境)
console.log(fruits); // 输出:['apple', 'banana', 'grape', 'orange']

3. 注意!默认排序对数字不友好

const nums = [3, 11, 2];
nums.sort(); // 不传入比较函数,按字符串排序('11' < '2' < '3')
console.log(nums); // 输出:['11', '2', '3'](错误!元素被转为字符串比较)// 正确做法:必须传入数字比较函数
nums.sort((a, b) => a - b);
console.log(nums); // 输出:[2, 3, 11]

11. splice - 增删改元素(原地修改)

语法

array.splice(startIndex, deleteCount, item1, item2, ...);
数组.splice(开始索引, 删除数量, 【可选】插入的新元素1, 新元素2, ...);

参数详解

1. 必传参数:startIndex(开始索引)

  • 从数组的哪个位置开始操作,可以是 正数 或 负数
    • 正数:表示从数组的第 startIndex 个元素开始(索引从 0 开始,如 0 表示第一个元素)。
    • 负数:表示从数组末尾倒推的位置(如 -1 表示最后一个元素,-2 表示倒数第二个元素)。
    • 如果 startIndex 超过数组长度,会从数组末尾开始操作(相当于在末尾插入或删除)。

2. 必传参数:deleteCount(删除数量)

  • 需要从 startIndex 位置 删除的元素个数,可以是 0(不删除元素,仅插入新元素):
    • 若 deleteCount 大于剩余元素数量,会删除从 startIndex 到末尾的所有元素。
    • 若 deleteCount 为 0,则不会删除元素,仅执行插入操作(见下方示例)。

3. 可选参数:item1, item2, ...(插入的新元素)

  • 从 startIndex 位置 插入的新元素,可以是任意数量(包括 0 个,即仅删除不插入)。
  • 插入的元素会放在被删除元素的位置(如果有删除操作),或直接插入到 startIndex 位置(如果 deleteCount 为 0)。
const fruits = ['apple', 'banana', 'orange', 'grape'];
// 删除从索引 2 开始的 1 个元素(删除 'orange')
const deleted = fruits.splice(2, 1); 
console.log(fruits); // 输出: ['apple', 'banana', 'grape']
console.log(deleted); // 输出: ['orange']// 插入新元素:从索引 2 开始,删除 0 个元素,插入 'orange'
fruits.splice(2, 0, 'orange'); 
console.log(fruits); // 输出: ['apple', 'banana', 'orange', 'grape']

12. reverse - 反转数组(原地修改)

语法

array.reverse();

作用
反转数组元素顺序,原数组被修改,返回反转后的原数组。
测试案例

const numbers = [1, 2, 3, 4];
numbers.reverse();
console.log(numbers); // 输出: [4, 3, 2, 1]

13. findIndex - 查找元素索引

语法

array.findIndex(callback(element, index, array), thisArg);

作用
返回第一个符合回调条件的元素的索引,若不存在则返回 -1,原数组不变。
测试案例

const users = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' }
];
const index = users.findIndex(u => u.id === 2);
console.log(index); // 输出: 1(索引从 0 开始)const notFound = users.findIndex(u => u.id === 3);
console.log(notFound); // 输出: -1(未找到)

14.Array.of() 方法

作用

将一组值(任意数量、任意类型)转换为一个数组。

语法

Array.of(element1, element2, ..., elementN)

特点

  • 参数灵活:可以接受任意数量的参数,无论类型或数量。
  • 解决 Array 构造函数的歧义
    • Array(3) 会创建一个长度为 3 的空数组 [,,]
    • Array.of(3) 会直接返回 [3],避免了 Array 构造函数的歧义。

示例

// 基础用法
console.log(Array.of(1, 2, 3)); // [1, 2, 3]
console.log(Array.of("a", true, null)); // ["a", true, null]
console.log(Array.of()); // [](空数组)// 对比 Array 构造函数
console.log(Array(2)); // [,,](长度为2的空数组)
console.log(Array.of(2)); // [2](数组元素是2)

15.Array.from() 方法

作用

Array.from 是一个 静态方法,用于将 类数组对象(如 arguments、DOM 节点列表)或 可迭代对象(如 SetMap)转换为 真正的数组,并支持对转换后的元素进行 映射处理。它弥补了传统数组转换方法的不足,提供了更灵活的数组创建方式。

语法

Array.from(类数组或可迭代对象, 【可选】映射函数(元素, 索引), 【可选】指定映射函数中的this指向);
Array.from(arrayLike[, mapFn[, thisArg]])

参数说明

  1. arrayLike:需要转换的类似数组对象或可迭代对象(如 argumentsNodeList、字符串、SetMap 等)。
  2. mapFn(可选):对每个元素执行的映射函数,类似 Array.prototype.map
  3. thisArg(可选):映射函数中 this 的指向。

特点

  • 转换类数组对象
    类数组对象需具备 length 属性和索引(如 argumentsdocument.querySelectorAll 返回的 NodeList)。
  • 转换可迭代对象
    如字符串、SetMap 等。
  • 支持映射操作
    通过 mapFn 可在转换时对元素进行处理。

示例

// 转换类数组对象(arguments)
function handleArgs() {const argsArray = Array.from(arguments);console.log(argsArray); // [1, 2, 3]
}
handleArgs(1, 2, 3);// 转换可迭代对象(字符串)
console.log(Array.from("hello")); // ["h", "e", "l", "l", "o"]// 转换 Set
const set = new Set([1, 2, 3]);
console.log(Array.from(set)); // [1, 2, 3]// 使用映射函数
const arr = Array.from([1, 2, 3], x => x * 2);
console.log(arr); // [2, 4, 6]// 处理类似数组但无length的对象(需手动指定length)
console.log(Array.from({0: 'a', 1: 'b', length: 2})); // ["a", "b"]

相关文章:

JavaScript 数组常用方法解析

1. concat - 合并数组 语法&#xff1a; const newArray oldArray.concat(value1, value2, ..., arrayN); 作用&#xff1a; 将当前数组与其他数组或值合并&#xff0c;返回一个新数组&#xff0c;原数组不变。 测试案例&#xff1a; const arr1 [1, 2, 3]; const arr2…...

Linux知识--软件管理

1.RPM包 1.1简介 又称为二进制包&#xff0c;无需编译&#xff0c;可以直接使用 1.2工具 1.2.1YUM工具 简介 基于RPM包管理&#xff0c;能够从指定服务器自动下载RPM包并且安装 可以自动处理依赖关系&#xff0c;并且一次性安装所有依赖的软件包&#xff0c;无需一…...

09.传输层协议 ——— TCP协议

文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…...

chromedp 反反爬设计方案

二、基础防护层实现 1. 浏览器特征伪装 opts : append(chromedp.DefaultExecAllocatorOptions[:],// 禁用自动化特征chromedp.Flag("disable-blink-features", "AutomationControlled"),chromedp.Flag("useAutomationExtension", false),// 随…...

数字化转型“变形记”:中钧科技经营帮如何让企业长出“智慧骨骼”

数字化转型就像给企业安装一个"智慧引擎"&#xff0c;而中钧科技的经营帮平台就是这台引擎的智能控制系统。让我们用"人体"来打个比方——当企业的数据、流程、决策像神经脉络般打通&#xff0c;才能真正实现灵活运转。下面就以经营帮的五大核心板块为例&a…...

【问题解决】centos7已经不维护了,如何继续使用yum源?

背景 CentOS 7 已于2024年6月30日停止维护&#xff0c;在停止维护后我们之前配置的国内镜像源大多都是空目录了&#xff0c;即在线国内镜像源不可用,就像下边这样提示&#xff1a; [rootbogon yum.repos.d]# yum install vim 已加载插件&#xff1a;fastestmirror Loading mi…...

Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现

背景 最近在研究了一下 Starrocks的tablet的Rebalance的能力&#xff0c;这里进行记录一下 本文基于 StarRocks 3.3.5 结论 数据的rebalance 主要以两种模式来进行&#xff1a; 按照磁盘的使用率进行移动&#xff0c;如果每个BE的磁盘使用率不足tablet_sched_balance_load_…...

Redis 接收连接

阅读本文前&#xff0c;建议先看&#xff1a;Redis 事件循环&#xff08;Event Loop&#xff09;。 Redis 6 支持接收 3 种连接&#xff0c;对应的接收处理器如下&#xff1a; TCP&#xff1a;acceptTcpHandler&#xff1b;TLS&#xff1a;acceptTLSHandler&#xff1b;Unix …...

AGI大模型(12):向量检索之关键字搜索

1 检索的方式有那些 列举两种: 关键字搜索:通过用户输入的关键字来查找文本数据。语义搜索:不仅考虑关键词的匹配,还考虑词汇之间的语义关系,以提供更准确的搜索结果。2 关键字搜索 先看一个最基础的实现 安装模块 pip install redis 不会redis的去看我的redis专题 首…...

【计算机视觉】CV实战项目- Face-and-Emotion-Recognition 人脸情绪识别

Face-and-Emotion-Recognition 项目详细介绍 项目概述项目功能项目目录结构项目运行方式1. 环境准备2. 数据准备3. 模型训练4. 模型运行 常见问题及解决方法1. **安装依赖问题**2. **数据集问题**3. **模型训练问题**4. **模型运行问题** 项目实战建议项目参考文献 项目概述 F…...

基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案

0 引言 近年来&#xff0c;我国自主可控芯片在国家政策和政 府的支持下发展迅速&#xff0c;并在电力、军工、机械、 通信、电子、医疗等领域掀起了国产化替代之 风&#xff0c;但在芯片自主可控和国产化替代方面还有明 显的不足之处。 2022年我国集成电路进口量多 达 5 3…...

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…...

Qt QThread 两种线程管理方法

在 Qt 中,QThread 有两种常见的用法,分别对应不同的线程管理模型。这两种方法各有优缺点,适用于不同的场景: 1. 子类化 QThread(继承 QThread,重写 run() 方法) 这是传统的线程用法,类似于 Java 或 C++ 标准库中的线程模型。通过继承 QThread 并重写 run() 方法,将需…...

长期行为序列建模技术演进:从SIM到TWIN-v2

背景 在推荐系统与广告投放领域&#xff0c;长期行为序列建模旨在从用户数月甚至数年的历史行为中捕捉稳定兴趣模式&#xff0c;是解决冷启动、提升推荐精度的关键。随着工业界需求激增&#xff0c;SIM、ETA、SDIM、TWIN及TWIN-v2等模型相继诞生&#xff0c;推动技术不断革新。…...

Linux下 REEF3D及DIVEMesh 源码编译安装及使用

目录 软件介绍 基本依赖 一、源码下载 1、REEF3D 2、DIVEMesh 二、解压缩 三、编译安装 1、REEF3D 2、DIVEMesh 四、算例测试 软件介绍 REEF3D是一款开源流体动力学框架&#xff0c;提供计算流体力学及波浪模型。软件采用高效并行化设计&#xff0c;可以在大规模处理器…...

极狐GitLab Git LFS 速率限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Git LFS 速率限制 (BASIC SELF) Git LFS (Large File Storage) 是一个用于处理大文件的Git扩展。如果您在仓库中使用 Git LF…...

缓存,内存,本地缓存等辨析

快速辨析缓存&#xff0c;内存&#xff0c;本地缓存&#xff0c;memcache&#xff0c;redis等 &#xff08;个人临时记录&#xff09; 缓存 泛指所有用于暂存数据以提升访问速度的技术&#xff0c;包括本地缓存、分布式缓存、CPU缓存等。核心目标是减少对慢速存储&#xff08…...

【k8s】PV,PVC的回收策略——return、recycle、delete

PV 和 PVC 的回收策略主要用于管理存储资源的生命周期&#xff0c;特别是当 PVC 被删除时&#xff0c;PV 的处理方式。回收策略决定了 PV 在 PVC 被删除后的行为。 回收策略的类型 Kubernetes 提供了三种主要的回收策略&#xff0c;用于管理 PV 的生命周期&#xff1a; Reta…...

YOLO算法的革命性升级:深度解析Repulsion损失函数在目标检测中的创新应用

## 一、目标检测的痛点与YOLO的局限性 在自动驾驶、智能监控等复杂场景中,目标检测算法常面临致命挑战——遮挡问题。当多个物体相互遮挡时,传统检测器容易出现漏检、误检现象,YOLO系列算法尽管在速度与精度上表现优异,但在处理密集遮挡目标时仍存在明显短板。 ### 1.1 遮…...

嵌入式软件测试的革新:如何用深度集成工具破解效率与安全的双重困局?

在汽车电子、工业控制、航空航天等嵌入式开发领域&#xff0c;团队常面临一个看似无解的悖论&#xff1a;如何在保证代码安全性的前提下&#xff0c;大幅提升测试效率&#xff1f; 传统测试工具往往需要搭建独立环境、插入大量桩代码&#xff0c;甚至需要开发者手动编写测试用例…...

Android studio—socketIO库return与emit的使用

文章目录 一、Socket.IO库简单使用说明1. 后端 Flask Flask-SocketIO2. Android 客户端集成 Socket.IO3. 布局文件注意事项 二、接受服务器消息的二种方法1. 客户端接收通过 emit 发送的消息功能使用场景后端代码&#xff08;Flask-SocketIO&#xff09;客户端代码&#xff08…...

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1&#xff1a;配置虚拟环境案例2&#xff1a;智能代码补全案例3&#xff1a;调试配置 运行结果…...

验证Kubernetes的服务发现机制

验证Kubernetes的服务发现机制 文章目录 验证Kubernetes的服务发现机制[toc]一、验证基于环境变量的服务发现机制 服务发现是让客户端能够以固定的方式获取到后端Pod访问地址的机制。下面验证环境变量和DNS这两种机制。 一、验证基于环境变量的服务发现机制 对于需要访问服务…...

《计算机视觉度量:从特征描述到深度学习》—深度学习图像特征工程

传统算法的图像特征分析和描述&#xff0c;一直贯穿图像算法的发展。2017年深度学习的出现&#xff0c;很多开发人员和技术人员认为&#xff0c;图像特征分析这个概念可以被深度学习完全取代。很长一段时间以深度学习为主的视觉方案成为主流&#xff0c;逐渐淡化了传统视觉的特…...

Ubuntu24.04安装ROS2问题

1&#xff0c;根据官方指导安装&#xff0c;安装到步骤&#xff1a; sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 时遇到问题。导致sudo apt update一直报错&#xff1a; 找了几天的资料…...

【图问答】DeepSeek-VL 论文阅读笔记

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于图片问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;的任务 2. 模型结构 和 三段式训练 1&#xff09;使用 SigLIP 和 SAM 作为混合的vision encoder&#xf…...

【专题刷题】滑动窗口(二):水果成篮,所有字母异位词,乘积小于 K 的子数组

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…...

中间件--ClickHouse-12--案例-1-日志分析和监控

1、案例背景 一家互联网公司需要实时分析其服务器日志、应用日志和用户行为日志&#xff0c;以快速发现潜在问题并优化系统性能。 2、需求分析 目标&#xff1a;实时分析日志数据&#xff0c;快速发现问题并优化系统性能。数据来源&#xff1a; 服务器日志&#xff1a;如 Ng…...

Java—— 常见API介绍 第三期

BigInteger 说明&#xff1a; BigInteger表示一个大整数 构造方法&#xff1a; 方法名说明public BigInteger(int num, Random r)获取随机大整数&#xff0c;范围:[0 ~ 2^num -1]public BigInteger(String val)获取指定的大整数public BigInteger(String val, int radix)获取指…...

Qt 信号与槽复习

Qt 信号与槽复习 Qt 信号与槽&#xff08;Signals and Slots&#xff09;机制是 Qt 框架的核心特性之一&#xff0c;用于实现对象之间的通信。它提供了一种松耦合的方式&#xff0c;使得组件可以独立开发和复用&#xff0c;广泛应用于 GUI 编程、事件处理和跨模块交互。本文将…...