手把手教你华为鸿蒙开发之第七节

news/2025/2/7 13:49:58/文章来源:https://www.cnblogs.com/Thewang/p/18584057

华为鸿蒙开发:数组和对象遍历及UI渲染详解

引言

在华为鸿蒙操作系统的开发中,数组和对象的遍历是基础且频繁的操作。无论是处理数据集合还是动态生成用户界面,都需要对数组和对象进行高效的遍历。本文将详细介绍如何在鸿蒙开发中使用 for 循环、for...of 循环以及 ForEach 方法来遍历数组和对象,并展示如何在UI中渲染这些数据。

遍历数组

基本遍历

数组遍历是访问数组中每个元素的过程。在鸿蒙开发中,我们可以使用 for 循环和 for...of 循环来实现。

示例1:使用 for...of 循环遍历数组

@Entry
@Component
struct Index {build() {let names: string[] = ['Alice', 'Bob', 'Charlie', 'David', 'Eva'];for (let item of names) {console.log('数组中的每一项', item);}}
}

在这个示例中,我们使用 for...of 循环遍历了一个包含姓名的数组,并打印出每个元素。

累加和

示例2:计算数组元素的累加和

@Entry
@Component
struct Index {build() {let sum: number = 0;let numbers: number[] = [10, 20, 30, 40, 50];for (let item of numbers) {sum += item;}console.log('结果', sum);}
}

在这个示例中,我们初始化了一个累加器 sum,并在遍历过程中将每个元素的值加到 sum 上,最后打印出累加的结果。

筛选数组

示例3:筛选数组中大于等于10的元素

@Entry
@Component
struct Index {build() {let numbers: number[] = [10, 5, 30, 40, 60, 10, 15, 5, -2];let filteredNumbers: number[] = [];for (let item of numbers) {if (item >= 10) {filteredNumbers.push(item);}}console.log('新数组', filteredNumbers);}
}

在这个示例中,我们创建了一个新数组 filteredNumbers 来存储所有大于等于10的元素,并使用 push 方法将符合条件的元素添加到新数组中。

去重数组

示例4:数组去重,将非0项收集到一个新数组中

@Entry
@Component
struct Index {build() {let numbers: number[] = [10, 5, 0, 40, 0, 0, 15, 5, 0];let uniqueNumbers: number[] = [];for (let num of numbers) {if (num !== 0) {uniqueNumbers.push(num);}}console.log('新数组', uniqueNumbers);}
}

在这个示例中,我们遍历数组并使用 push 方法将非0元素添加到新数组 uniqueNumbers 中,实现了去重的功能。

遍历对象数组

示例5:遍历对象数组

对象数组的遍历与普通数组类似,但需要通过属性访问每个对象的值。

@Entry
@Component
struct Index {build() {interface Student {stuId: number;name: string;gender: string;age: number;}let students: Student[] = [{ stuId: 1, name: 'John', gender: 'Male', age: 14 },{ stuId: 2, name: 'Emily', gender: 'Female', age: 13 },{ stuId: 3, name: 'Michael', gender: 'Male', age: 15 },{ stuId: 4, name: 'Sophia', gender: 'Female', age: 14 },];for (let student of students) {console.log('学生ID:', student.stuId, '姓名:', student.name, '性别:', student.gender, '年龄:', student.age);}}
}

在这个示例中,我们定义了一个 Student 接口来描述学生对象的结构,并创建了一个学生对象数组 students。然后我们遍历这个数组,并打印出每个学生的详细信息。

UI渲染

示例6:使用ForEach遍历数组并渲染UI

在鸿蒙开发中,我们经常需要将数组中的数据渲染为UI元素。ForEach 方法是实现这一功能的强大工具。

@Entry
@Component
struct Index {@State categories: string[] = ['智能家电','潮流服饰','儿童玩具','影视音乐','环球旅行'];build() {Column() {ForEach(this.categories, (category: string, index: number) => {Text(`${index + 1} ${category}`).fontSize(24).fontWeight(700).fontColor(Color.Blue).padding(15).width('100%');});}}
}

在这个示例中,我们定义了一个包含分类名称的数组 categories,并使用 ForEach 方法遍历这个数组。对于每个分类,我们创建了一个 Text 组件来显示分类的编号和名称,并设置了字体大小、粗细和颜色等样式。

示例7:渲染文章列表

在实际应用中,我们经常需要渲染复杂的数据结构,如文章列表。

interface Article {title: stringcreateTime: string
}@Entry
@Component
struct Index {@State articles: Article[] = [{title: '探索智能家居的新趋势',createTime: '2024-02-01 10:00:00'},{title: 'JavaScript异步编程深入解析',createTime: '2024-02-01 11:00:00'},{title: '5G技术在物联网中的应用',createTime: '2024-02-01 12:00:00'},];build() {Scroll() {Column() {this.articles.forEach((article, index) => {Column() {Text(article.title).width('100%').fontSize(15).fontColor('#000000').lineHeight(20);Text(article.createTime).margin({top: 15}).width('100%').fontSize(12).fontColor('rgb(128, 128, 128)');}.padding({top: 15, bottom: 15}).width('100%').border({width: {bottom: 2},color: {bottom: '#e0e0e0'}});});}.constraintSize({minHeight: '100%'});}.padding({ left: 13, right: 13 }).width('100%').height('100%');}
}

在这个示例中,我们定义了一个包含文章对象的数组 articles,并使用 forEach 方法遍历这个数组。对于每篇文章,我们创建了两个 Text 组件来显示文章的标题和创建时间,并设置了相应的样式。我们还使用了 ScrollColumn 组件来布局文章列表,并设置了内边距和边框样式。

结语

遍历数组和对象以及在UI中渲染数据是鸿蒙开发中的重要技能。通过本文的详细介绍和示例,你应该能够掌握这些技能,并在实际开发中灵活运用。如果你有任何问题或想要进一步讨论,欢迎在评论区留下你的想法。


以上就是一篇关于华为鸿蒙开发中数组和对象遍历及UI渲染的详细教程。希望这篇文章能帮助你更好地理解和使用华为鸿蒙开发中的相关功能。如果你在使用 DevEco Studio 进行开发时遇到任何问题,欢迎交流讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL基础语法学习(三)

本章节内容主要针对,表中数据的增、删、改,以及视图的概率,创建,修改、删除、查询做内容总结。 一、数据插入、修改、删除 数据插入的代码格式: insert into 表名 [(字段列表)] values(值列表...); 例如下案例所示: //标准添加(指定所有字段,给定所有的值) insert …

【文末赠票】和网易伏羲共探100个值得深入学习的技术创新案例

在人工智能技术的浪潮中,AI Agent正成为推动游戏行业创新的关键力量。随着 LLM 的不断发展,Agent 不管是在游戏设计、玩家体验,还是在 NPC 行为模拟等方面都展示了巨大的潜力。《永劫无间》手游近期发布的多模态实时交互的语音 AI 队友就是一次重大突破。传统机器人队友常常…

Nuxt.js 应用中的 error 事件钩子

title: Nuxt.js 应用中的 error 事件钩子 date: 2024/12/3 updated: 2024/12/3 author: cmdragon excerpt: 在任何 Web 应用中,错误是不可避免的。无论是网络请求失败、服务器错误、还是用户输入不合法,这些错误都可能影响用户体验和应用的稳定性。为了提升恢复能力和用户体…

VMware NSX 4.1.2.5 - 网络安全虚拟化平台

VMware NSX 4.1.2.5 - 网络安全虚拟化平台VMware NSX 4.1.2.5 - 网络安全虚拟化平台 构建具有网络连接和安全性的云智能网络,跨多种云环境支持一致的策略、运维和自动化 请访问原文链接:https://sysin.org/blog/vmware-nsx-4/ 查看最新版。原创作品,转载请保留出处。 作者主…

VMware Integrated OpenStack 7.3 现已支持 vSphere 8.0U3 和 NSX 4.2 互操作性

VMware Integrated OpenStack 7.3 现已支持 vSphere 8.0U3 和 NSX 4.2 互操作性VMware Integrated OpenStack 7.3 - VMware 支持的 OpenStack 发行版 VMware 支持的 OpenStack 发行版:在 VMware 虚拟化技术之上运行企业级 OpenStack 云 请访问原文链接:https://sysin.org/blo…

NVR接入录像回放平台EasyCVR视频汇聚平台关于安防摄像机常用的接口类型科普

在现代安防领域,摄像机镜头接口的选择对于确保图像质量和监控效果至关重要。不同的接口类型适应了多样化的应用场景,从精细的监控需求到专业的摄影摄像,每种接口都有其独特的优势和适用性。本文将详细介绍安防行业中常用的镜头接口类型,通过深入了解这些技术细节,我们旨在…

EHOME视频平台EasyCVR私有化部署视频平台级联时上级请求invite不回复的原因排查

在现代社会,安防监控系统的普及和应用已成为保障公共安全、维护社会秩序的重要手段。EasyCVR作为一款先进的安全监控视频系统,凭借其高效的视频传输技术和丰富的协议支持,能够满足大规模、高并发的远程监控需求。然而,在级联的使用场景中,用户可能会遇到诸如无法播放等问题…

ISSAC GYM解决RuntimeError: nvrtc: error: invalid value for --gpu-architecture (-arch)的问题

起因 一开始我什么都没干,就突然报了这么一个错误:我震惊了,因为我以为又是cuda沙雕了,没想到网上一查,真是如此 分析 一些网上博客的解决方法 都说其实是因为pytorch的版本问题,然后重新安装之类的blablabla 我也照做了,但是,却并没有解决问题:就在我非常狂躁之时,我…

H5-21 文本属性

1、text-align指定元素文本的水平对齐方式值 描述left 文本居左排列,默认值right 把文本排列到右边center 把文本排列到中间 h3{text-align: center;}h3{text-align: left;}h3{text-align: right;}2、text-decorationtext-decoration属性规定添加到文本的修饰,下划线、上划线…

NOIP 2024 游记 / 2024 OI 年终总结

昔人已乘黄鹤去,此地空余黄鹤楼。NOIP 2024 游记 / 2024 OI 年终总结 赛前 11.27 在 NOIP 赛前最后一场信心赛中嗯造 T4 两个小时还不会。蓝题都做不出来,感觉把信心打没了。 11.28 模板大赛!复习了一些数据结构;复习了串串;Duel。 11.29 上午继续模板大赛,复习了图论;D…

Seed Lab实验:Attacks on the TCP Protocol

Seed Lab实验:Attacks on the TCP Protocol笔记一、docker使用 docker换源: vim /etc/docker/daemon.json{"registry-mirrors": ["https://docker.1panel.live"] }docker创建: docker-compose builddocker开启: docker-compose upctrl+shift+T 新建一个…