i.MX8M Plus双千兆网口SBC:边缘AI网关与工业应用实战

【JS】JavaScript 中数组的常用操作方法和对比 JavaScript 中数组的常用操作方法和对比 阅读详情

从一块双千兆网口的i.MX8M Plus单板计算机说起。去年我在评估边缘AI网关方案时,一直想找一块“既能跑轻量模型、又能当网络边界设备”的板子:CPU性能不能太弱,NPU最好有1 TOPS以上,双网口是刚需,最好还能用模块化设计方便日后升级。当时Aries Embedded推出了搭载i.MX8M Plus模块的I-Pi SBC,这个组合几乎把我需求单上的选项全勾了。i.MX8M Plus是NXP带NPU的明星处理器,I-Pi是围绕SMARC模块做的载板生态,双GbE网口让它在工业网关、边缘AI盒子、机器视觉设备里都能站得住脚。

如果你正在选型边缘计算平台,或者想把手头的AI模型部署到真实硬件上,这篇文章会把这套组合的硬件逻辑、部署流程、软件生态和踩坑记录全部拆开讲。我尽量不写厂商宣传稿式的内容,只讲一个工程师在实际使用中会关心的东西。

1. 产品拆解:i.MX8M Plus模块遇上I-Pi载板

1.1 i.MX8M Plus为什么是边缘AI的甜点位

先看芯片本身的定位。i.MX8M Plus是NXP在2021年正式量产的处理器,四核Cortex-A55(注意不是A53,是A55)最高跑到1.8GHz,搭配一个800MHz的Cortex-M7实时核。AI算力来自集成的NPU,标称2.3 TOPS,这个数字放在今天虽然不夸张,但在“低功耗+工业级”这个约束下仍然能打。关键是它够省电,典型功耗在几瓦到十几瓦之间,被动散热就能稳定跑,这是很多x86平台做不到的。

除了NPU,这颗SoC还集成了图像信号处理器ISP和H.264/H.265编解码单元,支持1080p60的编解码。这意味着摄像头接入、视频流处理、AI推理可以在一块芯片上串成完整的流水线。对做视觉检测设备的人来说,这比“CPU干视频、GPU干推理、再外挂编码器”的方案简单太多。

我选这颗芯片还有一个原因:NXP的BSP和文档体系在工业级SoC里算非常完整的。Yocto层、Debian镜像、eIQ工具链都有官方维护,不像某些芯片厂商给个SDK就撒手不管了。对于产品开发来说,芯片本身强不如“芯片加上软件生态”强,这个道理做过选型的人都有深刻体会。

1.2 模块化设计:SMARC载板与模块分离的工程价值

I-Pi不是传统意义上的一整块开发板,它采用的是模块化设计:核心板和载板分离。核心板遵循SMARC 2.1标准(Smart Mobility Architecture),i.MX8M Plus所有的高速信号、电源管理、DDR颗粒都集成在这张信用卡大小的模块上,而I-Pi载板负责把引脚引出成实际可用的接口。

这种设计的好处非常实际。第一,产品迭代时不用重新设计电源和DDR走线,核心板升级、载板复用,能省掉一个完整硬件改版周期;第二,SMARC标准是通用的,同一块载板以后还能换别家的核心板,减少被单一供应商锁定的风险;第三,核心板经过厂商完整验证,DDR信号完整性、电源时序这些最容易翻车的部分已经替你踩过坑了。

当然也有代价。模块加载板的堆叠结构会增加整体高度和成本,散热路径也相对复杂。但如果你做的是10台以上的小批量设备,而不是单板玩具,那模块化的优势是压倒性的。I-Pi这块载板我在实际使用中觉得走线很干净,电源部分用料也扎实,整体做工在同类产品里属于上乘。

1.3 双GbE网口:这块板子真正的差异化

I-Pi载板上最显眼的配置是两个千兆以太网口。别小看这两个RJ45,这是整套方案能胜任“网关”角色的关键。很多开发板只有单网口,做NAT要额外接USB网卡,稳定性先不说,驱动兼容性就够折腾半天。双原生网口意味着你可以一个口接摄像头/现场设备,另一个口接上层交换机,直接充当工业数据采集网关。

i.MX8M Plus本身支持双千兆MAC,其中一个还集成了TSN(时间敏感网络)功能。TSN是工业以太网的重要演进方向,它能在一根网线上同时传输实时控制流量和普通数据流量,并且保证关键帧的确定性延迟。这在运动控制、机器人协同场景里是刚需。I-Pi载板把这两个网口的PHY都做了出来,一个是内部MAC直连PHY,另一个也走完整物理层,实测两个口都能跑到线速,延迟表现也不错。

对于想做软路由、防火墙、工业协议网关的人来说,这套硬件组合开箱即用,不需要再动烙铁。

2. 核心硬件细节与关键设计解读

2.1 双网口的实现方式与TSN能力

先把双网口的实现讲透。i.MX8M Plus内部有两个千兆MAC,其中一个集成在SoC内部,另一个同样由SoC提供MAC,但都需要外部PHY芯片来完成物理层转换。I-Pi载板选择了两颗千兆PHY,通过RGMII接口与SoC相连。这种设计的好处是灵活性高,PHY芯片可以按需更换,成本也可控。

我在实际测试中验证过,两个网口都可以在纯二层交换模式下工作,也可以分别配置为独立的三层接口。做软路由时,用iptables开启NAT和转发,实测经两个网口转发跑满千兆时CPU占用率还能控制在比较低的水平。如果你要做TSN,NXP的BSP里带了相关配置示例,主要用到Linux的tc工具和ethtool,配置IEEE 802.1Qbv的时间槽表时需要先摸清现场的流量模型,这个后面实操章节再展开。

有一个细节值得注意:两个网口虽然都是千兆,但如果做工业现场接入,建议把接设备的口强制配置为百兆或千兆固定模式,而不是自动协商。很多老设备在自适应协商时会出幺蛾子,固定速率反而更稳。这个坑我在现场调试时踩过,后面问题排查章节细说。

2.2 内存、存储与无线扩展选项

再来看存储和内存。I-Pi这套方案的核心板默认带LPDDR4内存,容量从2GB到8GB都有可选。以我的经验,跑Linux系统加轻量AI推理,4GB是起步,8GB会比较从容,尤其是要跑YOLO这类模型加多路视频流时,内存占用会涨得很快。

存储方面,核心板集成eMMC,容量通常8GB起步,载板上还有microSD卡槽和M.2接口。M.2接口支持NVMe SSD扩展,也支持M.2无线网卡。我个人的推荐配置是:eMMC放系统,microSD做备份启动,M.2插NVMe放数据集和模型文件。这套组合基本覆盖了从开发调试到现场部署的所有存储需求。

无线扩展上,M.2接口可以插Wi-Fi 6模块,载板上还有SIM卡槽,合起来就能做4G/5G蜂窝通信。这个配置对部署在偏远工业现场的网关设备来说非常实用,有线断了能自动切蜂窝网络,保证数据链路不中断。

2.3 供电、散热与工业级工作温度

供电和散热是这类板子最容易忽视、也最容易翻车的环节。I-Pi载板支持12V直流供电,板上有完整的PMIC,整板功耗我在实测中跑到大约5W到12W之间,看负载情况。NPU满载推理时功耗会明显上升,但即便满载,用随机附带的散热片加小风扇也完全压得住。

工业级工作温度方面,i.MX8M Plus本身有商业级和工业级两个版本,工业级支持-40°C到+85°C。如果你的产品要部署在户外机柜、高温车间或寒冷地区,选型时一定要确认核心板上用的是工业级芯片。Aries Embedded这类专业厂商在选料上通常比较规范,但带“工业级”三个字和实际用工业级芯片之间还是两回事,下单前最好找厂家确认。

散热设计上,我的建议是:如果机箱空间允许,直接上铝制被动散热片,配合机箱外壳做导热。风扇虽然便宜,但在工业环境里是故障率最高的部件,能不用就不用。

3. 从零开始:搭建边缘AI原型机的实操过程

3.1 系统烧录与首次启动

拿到板子第一件事当然是烧系统。i.MX8M Plus的启动流程是:ROM code先加载U-Boot,U-Boot再加载内核和根文件系统。官方提供的镜像已经把这套流程处理好了,你只需要把镜像写到SD卡或eMMC里。

我推荐先用SD卡启动,等系统跑通了再烧到eMMC。烧录工具用balenaEtcher就行,选好镜像文件、选好SD卡,点Flash就完事。写入完成后插卡上电,串口接上USB转TTL,默认波特率115200,就能看到完整的启动日志。

首次启动建议做三件事:第一,确认U-Boot版本和内核版本,记下来方便后面排查问题;第二,检查两个网口是否都被内核识别到,用 ip link 命令看;第三,确认NPU设备节点存在,在 ls /dev 里应该能看到 npu 相关设备。

注意:如果是用eMMC启动的出厂系统,先用U-Boot命令 ums 0 mmc 0 把eMMC暴露成USB存储设备,再在电脑上烧录。千万别在没确认启动模式的情况下直接上电,变砖的概率不大,但会很折腾。

3.2 用eIQ工具链把模型跑上NPU

接下来是重头戏:把一个模型真正部署到NPU上。NXP的AI软件栈叫eIQ Toolkit,它把模型转换、量化、推理运行时的全链路都包了。整体流程是:用你熟悉的框架训练模型,导出成ONNX或TensorFlow Lite格式,然后用eIQ工具做量化转换,最后在板子上用推理引擎加载。

我以一个分类模型为例。先在PC上安装eIQ Toolkit的转换工具,把训练好的ONNX模型转成NPU支持的格式。转换时会做int8量化,这一步需要准备校准数据集,通常几百张代表性图片就够。量化后模型体积会缩小到原来的四分之一,推理速度提升明显。

转换完成后把模型文件拷贝到板子上,用eIQ提供的推理运行库加载。我在I-Pi上实测MobileNetV2的int8量化模型,单次推理延迟在几毫秒量级,这个性能足够跑实时视频分析了。跑模型前先确认板子上的OpenCL或NPU运行时版本和转换工具版本匹配,版本不一致会报奇怪的加载错误。

3.3 双网口做工业网关的配置

硬件有了,AI能跑了,接下来把它变成一台真正的工业网关。以“一个网口接现场摄像头、另一个网口接办公网”为例,我先要配置IP地址。假设enp1s0接摄像头网段192.168.10.0/24,enp2s0接办公网192.168.1.0/24,用NetworkManager或直接改 /etc/network/interfaces 都行。

然后开启内核IP转发,用iptables配置NAT。关键命令就一条: iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE 。摄像头网段的设备就能通过板子访问办公网了。要做协议网关,可以在板子上跑Modbus TCP、OPC UA这类工业协议转换软件,i.MX8M Plus的CPU性能处理这些协议栈绰绰有余。

如果要做TSN,配置会复杂一些。核心思路是:先通过ethtool确认PHY支持TSN,再用 tc qdisc 配置Qbv门控列表。注意TSN需要端到端的设备都支持,只有单端支持是跑不出确定性延迟的。我在实验室里测过两个I-Pi板子之间开TSN,延迟抖动从普通以太网的毫秒级降到了微秒级,效果确实明显。

3.4 功耗和散热实测记录

最后记录一下我实测的功耗数据。待机状态下(系统启动完成,无负载),整板功耗约4W。跑一个NPU推理任务持续满载时,功耗上升到8W左右。同时跑NPU推理加双网口高速转发,峰值功耗到了11W。这个功耗水平意味着散热压力不大,我用的被动散热片在室温25°C环境下,满载半小时后芯片温度稳定在68°C左右,完全在安全范围内。

如果部署到密封机箱里,温度会再高5到10度,但只要机箱外壳是金属并且和散热片有导热路径,就没问题。这一份实测数据我建议做产品设计时列入参考,特别是电池供电的手持设备场景,功耗预算要预留充足。

4. 软件生态与BSP开发注意事项

4.1 Yocto还是Buildroot,怎么选

嵌入式Linux开发绕不开根文件系统构建工具的选择。I-Pi官方提供了Yocto BSP,这个方案功能全、维护活跃,NXP的imx层和Aries自己的meta层都持续更新。但Yocto的缺点是学习和构建成本高,第一次完整构建可能要几小时甚至十几个小时,而且对网络要求高,很多依赖要从国外源码站拉取。

如果你的产品只需要精简系统、快速启动,Buildroot是更轻量的选择。Buildroot配置简单,构建速度快,生成的文件系统干净,缺点是定制化深度不如Yocto。我的经验是:做产品原型验证用Buildroot,做正式产品开发用Yocto,两边不冲突。

无论选哪个,都建议把NXP官方文档里的“i.MX Yocto Project User's Guide”通读一遍,尤其是机器配置和镜像目标名称,搞错了会构建出完全不对的系统。

4.2 Python环境相关的常见坑

这块板子的官方Debian镜像预装了Python 3,但很多开发者在安装依赖时会遇到各种 ModuleNotFoundError 。最常见的两个是 pkg_resources 找不到和 OpenCV 导入失败。

pkg_resources setuptools 包提供的模块,报这个错通常是因为pip版本或setuptools版本过旧,或者系统里存在多个Python环境导致路径混乱。解法很简单: pip install --upgrade setuptools ,如果还不行,检查一下 python3 pip3 是不是指向同一个环境。

OpenCV导入失败更多是缺动态库,错误信息通常提示 libGL.so.1 找不到。这是因为OpenCV依赖图形库,而精简版系统里没有装。用 apt install libgl1 libglib2.0-0 就能解决。避免这些坑的方法其实很朴素:尽量不要自己手动去装各种依赖,用官方镜像自带的Python环境,或者用干净的虚拟环境,能省掉一大半麻烦。

4.3 调试工具与性能分析

开发过程中性能分析很关键。Linux下的 perf 工具在i.MX8M Plus上可用,可以用来分析CPU热点,特别适合排查推理任务的性能瓶颈。NPU的利用率没有现成的 nvidia-smi 那样的工具,但NXP的eIQ运行时提供了一些性能接口,可以查询单次推理耗时和NPU占用情况。

网络性能分析推荐 iperf3 ,测UDP/TCP吞吐量非常直观。我在双网口上测过TCP吞吐,基本能跑到线速的90%以上。还有一个容易被忽略的工具是 ethtool -S ,可以查看网卡的丢包和错误计数,排查网络问题时的第一手数据来源。

5. 常见问题与排查技巧实录

5.1 问题速查表

我把实际使用中遇到的问题整理成了表格,方便你直接对照排查。

现象 可能原因 解决办法
系统启动卡在U-Boot阶段 SD卡镜像不完整或启动分区损坏 重新烧录SD卡,或换一张卡
内核启动后找不到网口 PHY驱动未加载或设备树配置错误 检查设备树中网口节点状态,确认PHY地址
ip link 看到网口但插线不亮 网口强制速率配置错误 ethtool 设置固定速率和双工模式
NPU推理报错加载失败 模型转换工具版本与运行时版本不匹配 统一eIQ工具链版本,重新转换模型
Python导入包报ModuleNotFoundError 多Python环境冲突或依赖缺失 使用虚拟环境,按提示安装对应依赖
系统时间不准确 未配置RTC或NTP 配置NTP服务,或安装RTC电池
功耗异常偏高 12V电源质量问题或负载异常 更换电源,用 perf top 排查高占用进程

5.2 几个影响开发效率的坑

挑几个印象最深的坑详细说一下。第一个是自动协商的坑。现场设备接了一个老旧的工业相机,网口状态一直不停翻转,时通时断。排查了半天才发现是自动协商失败,后来在板子上把网口强制成100Mbps全双工,问题立刻消失。所以做网关项目时,接现场设备的网口务必先确认对端设备的协商模式。

第二个坑是OpenCV依赖缺失在无头系统上特别常见。因为I-Pi跑的是无桌面环境,很多基础的图形库没装,导致OpenCV装上但import时报错。这个坑不算难解,但很烦人,建议在镜像阶段就把 libgl1 这类基础库打进去,免得每次重烧系统都要手动补一遍。

第三个坑是NPU模型转换时校准数据集不够代表性。一开始我用50张图片做量化校准,出来的模型在测试集上精度掉了快10%,后来换成500张覆盖各种光照条件的图片,精度损失控制在2%以内。量化校准的质量直接决定模型精度,别在这个环节偷懒。

还有一个小经验:eMMC烧录时务必用U-Boot的 ums 命令,不要直接拔SD卡连电脑烧eMMC,那样容易把启动分区写坏。用 ums 把eMMC暴露成USB盘后,在电脑上像操作普通U盘一样烧录,稳妥得多。

这块板子我会继续用下去。它的双GbE加NPU组合,在目前的单板计算机方案里确实不多见,尤其适合那些既要做边缘AI、又要当网络节点的项目。我在实际使用中还有一个体会:这类模块化平台的价值不只是硬件本身,更在于它能让你把精力集中在应用层,而不是在底板的电源、DDR、高速走线上反复试错。如果你正在评估边缘AI网关或者工业控制设备的主板方案,I-Pi这块双GbE的i.MX8M Plus SBC值得花点时间仔细测一测。

Claude Code vs Codex Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。 阅读详情

相关推荐

Multisim14.3主数据库访问冲突:Windows更新KB5065426卸载系统兼容性修复指南

本文针对Multisim14.3在Windows更新KB5065426后出现的主数据库访问冲突问题,提供了详细的解决方案。通过卸载问题更新、修复系统兼容性及调整权限设置,帮助用户快速恢复元器件库的正常访问,确保电路仿真设计的连续性。

lstm7chronicler的博客 478

【Javascript】JS中对于数组的常用操作汇总

在实际应用中,经常需要根据具体需求编写比较函数来实现自定义排序逻辑,比如按照对象的某个属性排序对象数组。map()、find()、some()、sort()

VT_馒头的博客 1729

uniapp [全端兼容] - 实现省市区选择器三四级联动组件,uniapp选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择(全平台兼容苹果安卓App、支付宝微信小程序、移动端H5网页)

uni-app省市区选择器,省市区街道三级四级联动选择器,uniapp自定义多列选择器省市两级联动,uniapp picker组件实现多级联动,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniApp选择器省市区县街道乡镇,uniapp实现省市区选择联动,uniapp城市三级联动(自定义组件)_uniapp三级联动,picker插件省市区联动,uniapp小程序省市区选择器,uni-app 省市区街道的四级联动选择,uniapp怎样实现省市区地址三级联动uni

🏆 前端领域优质创作者 1万+

js数组操作

Js中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性。 文章目录一、对于数组的整体性操作二、数组的存取操作查找元素数组的字符串表示由已有数组创建新数组三、可变函数为数组添加元素从数组中删除元素从数组中间添加和删除元素为数组排序四、迭代器方法不生成新数组的迭代器方法生成新数组的迭代器方法 一、对于数组的整体性操作 对于数组的操作实际操作的是数组的索引 var nums = []; for...

withwz的博客 1万+

JavaScript JS数组的操作

JavaScript JS数组的操作 数组的操作 数据的循环本质上是。通过生成索引的下标 来获取数组中 的每一个单元存储的具体的数值 for的循环 for ···in和forEach的循环。 for循环可以通过控制循环的次数 来控制变量 for···in 循环一般用于字符串的循环 forEach 的循环一般都是用于数组的循环 数组常用的方法 调用:[]中括号的调用 修改:就是对一个数字的 重新的赋值的过程 删除: 通过控制数组的length的属性来删除末尾的数值 新增:对没有的数值进行赋值 就是对一个数组的

weixin_46688757的博客 232

前端JavaScript——js声明定义数组及常用操作

数组的声明: 1、在js中,数组的声明不需要指定其长度 2、在js中,数组可以存放不同类型的数据(一般要求数据中采访同类型的数据) js定义数组: 空数组 一般常用这种形式,数组元素的定义使用[] var arr=[]; var arr1=[9,5,2,7]; 还有一种声明形式; var arr=new array(); 对象数组 var arr2=[{Name:"小牧童",Age:12},{Name:"小蜗牛",Age:9}]; 访问数组: 数组元素的访问(同样使用下标进行访问) 比

m0_48930261的博客 1万+

JavaScript /JS 如何实现数组的创建,增加,删除,遍历等操作???

数组的定义:

余憨憨的学习日记 4543

java script 数组,JavaScript数组操作函数汇总

js中数组操作函数还是非常多的,今天忽然想到来总结一下,也算是温故而知新吧。不过不会针对每个办法都进行一下总结,只是针对一些比较常用的做个备注一下。这里总结到的 js 数组操作函数有:push,pop,join,shift,unshift,slice,splice,concat(1)push 和 pop这两个函数都是对数组从尾部进行压入或弹出操作。push(arg1,arg2,...)可以每次压入...

weixin_34378815的博客 247

JavaScript的数组操作神器 linq.js

我个人最喜欢的JavaScript的数组处理第三方库 有时候业务需要,要对数组进行比较复杂的处理,难倒是一点不难,就是感觉麻烦。 由于我自己是一个.net程序员出身,C#语言里对List的支持(LINQ)简直是指哪打哪,舒服到不行,就很怀念这个东西。 有一次遇到业务需求,就去搜了一下javascript linq,居然找到了这个意外收获。 从三年前我知道它就,就再也念念不忘了。 下面三张图,图1...

festone000的专栏 970

js开发:javascript操作数组

1、数组的创建  以下为引用的内容: var arrayObj = new Array(); //创建一个数组   var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度   var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建

Generon的博客 447

JS(四)JavaScript中的数组操作

substring使用起始索引和结束索引,而substr使用起始索引和长度。substr允许使用负数索引,而substring不支持。substring在处理不合法参数时会转换为 0,而substr则会处理为字符串末尾位置。

无人罪的博客 1019

js数组的操作

js数组的操作 用 js有很久了,但都没有深究过js的数组形式。偶尔用用也就是简单的string.split(char)。这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵呵。学了之后才知道,js数组的功能强大很,远比VB,C#强多了,大家慢慢看吧 1、数组的创建 vararrayObj=newArray()...

weixin_30462049的博客 116

html中js定义数组,javascript数组的定义及操作实例

数组是一组数据的集合,js中,数组里面的数据是可以不同类型的定义数组:1.通过类实例化来创建数组var alist01=new Array(1,2,3);2.通过直接量的方式来创建数组var alist02=[1,2,3];数组操作1.通过length来获取数组成员的个数alert(alist02.length);2.通过下标获取数组成员alert(alist02[0]);3.通过push,pop...

weixin_34039159的博客 761

js(Javascript)数组操作及数组去重

js(Javascript)数组操作及数组去重 一、数组操作 添加删除: (1)push(x) 将元素添加到数组最末尾 (2)unshift(x) 将元素添加到开头 (3)pop(x)删除最后一个元素 (4)shift(x)删除第一个元素 返回字符串:join() 二、数组去重操作 var arr = [1, 2, 2, 3, 4, 5, 5, 4, 8, 5, 1, 6, 1]; function singleArray(array) { var newArr = [];

weixin_58280614的博客 486

JavaScript中数组的操作

JavaScript中数组的操作 JavaScript的数组是可以直接进行增删查改,非常好用、方便。 【1】数组的创建 //创建一个数组 var arrayObj = new Array();  //创建一个数组并指定长度,注意不是上限,是长度。 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长...

懒虫翻身的博客 2187

前端学习——js数组的常用操作

<html> <head> <title>js数组的常用操作</title> <!-- 1;数组的合并var d=arr.concat(b,c); 2:数组指定间隔符转换字符串var e=arr.join("-"); 3: 数组移除最后一个元素并返回var f=arr.pop(); 4: 数组的追加,返回新的...

x1037490413的博客 771

javascript js 操作数组 增删改查的简单实现

var colors=['yellow','blue','red','pink']; // 删除第三个元素 colors.splice(2,1); console.log(colors); //indexOf 查询相符资料的索引 console.log(colors.indexOf('pink')); colors=['yellow','blue','red','pink']; // 在数...

丿灬安之若死 321

【JavaScript】盘点js中数组的操作方法

JavaScript数组的操作方法

一条有梦想的咸鱼 1418

js中数组的常用操作

js中数组的常用操作 <html> <head> <title>js的数组操作</title> <meta charset="UTF-8"/> <script type="text/javascript"> var arr=[15,"zxc","小红","11"]; // var b=["每天努力学习"...

weixin_44007988的博客 153

js的常用封装函数库之数组操作

js的封装函数功能:数组操作 // arrayEqual // 判断两个数组是否相等 function arrayEqual(arr1, arr2) { if (arr1 === arr2) return true; if (arr1.length != arr2.length) return false; for (var i = 0; i < arr1.lengt...

浮生离梦的博客 1247
上一篇: 零膨胀泊松回归(ZIP)实战:从原理到R语言实现与IRR/OR解读
下一篇: 水下船舶声音分类:融合CNN与注意力的双分支网络与五通道特征工程实践
weixin_34348174
博客等级 码龄11年 5468粉丝 917原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值