【前端教程】JavaScript 数组对象遍历与数据展示实战

在前端开发中,处理数组和对象是日常工作的基础。无论是篇文章将通过一个具体案例,详细讲解如何使用JavaScript遍历包含对象的数组,并将数据以清晰的格式展示在页面上。我们会从基础语法开始,逐步优化代码,最终实现一个既美观又实用的数据展示效果。

案例需求分析

我们需要处理一个包含人员信息的数组,每个元素都是一个包含bianhao(编号)、name(姓名)和age(年龄)属性的对象:

var personShuZu = [{'bianhao':007,'name':'诗书画唱1','age':20},{'bianhao':666,'name':'诗书画唱2','age':21},{'bianhao':233,'name':'诗书画唱3','age':22},
];

目标是将这些数据以结构化的方式展示在页面上,替代仅要显示数据,还要保证格式清晰、易于阅读。

基础实现:使用for…of和for…in遍历

首先,我们来分析原始代码的实现思路,它使用了两种不同的循环方式来处理数据:

  1. for...of:用于遍历数组元素(遍历数组的具体内容或值)
  2. for...in:用于遍历对象属性(遍历对象的属性名)

原始代码解析

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>人员信息展示</title>
<script>
var personShuZu=[{'bianhao':007,'name':'诗书画唱1','age':20},{'bianhao':666,'name':'诗书画唱2','age':21},{'bianhao':233,'name':'诗书画唱3','age':22},
];// 使用for...of遍历数组中的每个对象
for(var i of personShuZu){// 使用for...in遍历对象的每个属性for(var j in i){// 输出属性值,并用&nbsp;分隔document.write(i[j]+"&nbsp;");}// 每个对象的数据显示完后换行document.write("<br>");
}
</script>
</head>
<body>
</body>
</html>

这段代码的执行流程是:

  • 外层for...of循环逐个取出数组中的人员对象
  • 内层for...in循环遍历当前人员对象的所有属性
  • 使用document.write()输出属性值,并用空格分隔
  • 每个人员信息输出完成后换行

存在的问题

虽然这段代码能够展示数据,但存在几个明显的不足:

  1. 使用document.write()直接输出,不利于页面布局控制
  2. 没有表头,用户无法直观知道每个数值的含义
  3. 样式简陋,数据展示不够清晰
  4. 编号007会被解析为7(数字前导零问题)

优化实现:结构化展示与样式美化

让我们对代码进行全面优化,实现一个更专业的数据展示效果。

优化思路

  1. 使用DOM操作替代document.write():更灵活地控制页面元素
  2. 添加表头:明确每个数据字段的含义
  3. 使用表格布局:使数据展示更规整
  4. 添加CSS样式:提升视觉效果和可读性
  5. 修复数字前导零问题:确保编号正确显示
  6. 使用更现代的JavaScript语法:如const/let替代var

优化后的完整代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title>人员信息表</title><style>/* 页面基础样式 */body {font-family: 'Arial', sans-serif;margin: 20px;background-color: #f5f5f5;}/* 标题样式 */.title {color: #333;text-align: center;margin-bottom: 20px;}/* 表格样式 */.person-table {width: 100%;max-width: 600px;margin: 0 auto;border-collapse: collapse;background-color: white;box-shadow: 0 2px 5px rgba(0,0,0,0.1);}/* 表头样式 */.person-table th {background-color: #4CAF50;color: white;padding: 12px 15px;text-align: left;}/* 表格单元格样式 */.person-table td, .person-table th {border: 1px solid #ddd;padding: 12px 15px;}/* 表格行悬停效果 */.person-table tr:hover {background-color: #f8f8f8;}</style>
</head>
<body><h2 class="title">人员信息列表</h2><table class="person-table" id="personTable"><!-- 表格内容将通过JavaScript动态生成 --></table><script>// 人员数据(使用const声明常量)const personShuZu = [{'bianhao': '007', 'name': '诗书画唱1', 'age': 20},  // 编号改为字符串以保留前导零{'bianhao': '666', 'name': '诗书画唱2', 'age': 21},{'bianhao': '233', 'name': '诗书画唱3', 'age': 22},];// 获取表格元素const table = document.getElementById('personTable');// 创建表头行const headerRow = document.createElement('tr');// 定义表头文本(与数据属性对应)const headers = ['编号', '姓名', '年龄'];// 定义数据属性名const properties = ['bianhao', 'name', 'age'];// 创建表头单元格headers.forEach(headerText => {const th = document.createElement('th');th.textContent = headerText;headerRow.appendChild(th);});// 将表头添加到表格table.appendChild(headerRow);// 遍历人员数组,创建表格内容行personShuZu.forEach(person => {const row = document.createElement('tr');// 为每个属性创建单元格properties.forEach(prop => {const td = document.createElement('td');td.textContent = person[prop];row.appendChild(td);});// 将行添加到表格table.appendChild(row);});</script>
</body>
</html>

关键知识点解析

1. 数组与对象的遍历方式

JavaScript提供了多种遍历数组和对象的方法,各有适用场景:

  • for…of循环:适合遍历数组元素,语法简洁

    for (const person of personShuZu) {// 处理每个人员对象
    }
    
  • for…in循环:适合遍历对象的属性

    for (const key in person) {// 处理每个属性console.log(key + ': ' + person[key]);
    }
    
  • forEach方法:数组的内置方法,更现代的遍历方式

    personShuZu.forEach(person => {// 处理每个人员对象
    });
    

2. DOM操作 vs document.write()

document.write()虽然简单,但有明显缺点:

  • 会覆盖整个文档(如果在页面加载完成后使用)
  • 不利于代码组织和维护
  • 无法精确控制元素位置和样式

推荐使用DOM操作方法:

  • document.createElement():创建新元素
  • element.appendChild():添加子元素
  • element.textContent:设置元素文本内容

3. 数据类型注意事项

原始代码中编号007会被解析为数字7,因为JavaScript会自动忽略数字的前导零。解决方法:

  • 将编号定义为字符串类型(如'007'
  • 如需数字类型,可在展示时格式化:
    // 将数字格式化为3位,不足补零
    function formatNumber(num) {return num.toString().padStart(3, '0');
    }
    

拓展与实践

基于这个案例,你可以尝试以下拓展练习:

  1. 添加数据筛选功能:实现按年龄筛选人员的功能
  2. 添加排序功能:实现按编号或年龄排序
  3. 添加新增/删除功能:允许动态添加或删除人员信息
  4. 实现分页:当数据量较大时,分页展示数据
  5. 添加搜索功能:根据姓名模糊搜索人员

这些拓展将帮助你更深入地理解JavaScript数组操作、DOM manipulation和事件处理等核心前端技能。

总结

本文通过一个人员信息展示的案例,详细讲解了JavaScript中数组对象的遍历方法和数据展示技巧。我们从基础实现出发,逐步优化代码,最终实现了一个既美观又实用的数据展示页面。

核心要点回顾:

  • 选择合适的遍历方式处理数组和对象
  • 优先使用DOM操作替代document.write()
  • 注意数据类型对展示效果的影响
  • 合理运用CSS样式提升页面美观度
  • 代码组织应注重可读性和可维护性

掌握这些基础技能,将为你处理更复杂的前端数据展示需求打下坚实基础。

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

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

相关文章

无重复字符的最长子串,leetCode热题100,C++实现

题目来源&#xff1a;leetCode 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 解法 class Solution { public:int lengthOfLongestSubstring(string s) {unordered_set<…

卷积神经网络中1×1卷积的作用

part I &#xff1a;来源part II &#xff1a;应用part III &#xff1a;作用&#xff08;降维、升维、跨通道交互、增加非线性&#xff09;part IV &#xff1a;从fully-connected layers的角度理解一、来源&#xff1a;[1312.4400] Network In Network &#xff08;如果11…

VMware设置Ubuntu虚拟机桥接模式完整教程

VMware 设置 Ubuntu 虚拟机桥接模式完整教程 下面是一个详细的、避免出错的 VMware Ubuntu 桥接模式设置教程&#xff0c;包含常见问题的解决方案。 准备工作 确保宿主机&#xff08;Windows 11&#xff09;已连接到网络&#xff08;有线或无线&#xff09;确认您有管理员权限关…

浅析NVMe协议:DIF

文章目录概述DIF数据格式盘片支持DIFFormatPILPIMSETLBAF协议命令DIF支持PRACTPRACT0PRACT1PRCHK相关参考概述 NVMe协议将DIF信息作为元数据的一部分进行携带。 DIF数据格式 DIF的PI由多个字段组成&#xff0c;包括&#xff1a; Guard字段&#xff1a;基于逻辑块数据计算的C…

【观成科技】蔓灵花User下载者加密通信分析

概述2025年5月7日&#xff0c;蔓灵花&#xff08;BITTER&#xff09;组织针对巴基斯坦电信公司工作人员发起钓鱼邮件攻击&#xff0c;投递伪装为安全简报的恶意邮件&#xff0c;附件为IQY类型的Web查询文件。该文件在用户执行后通过HTTP协议获取远程CMD指令并执行&#xff0c;进…

Redis 保证数据不丢失

Redis 保证数据不丢失&#xff08;或最大限度减少丢失&#xff09;的核心是通过 持久化机制 结合 合理的配置策略 实现的。具体方案如下&#xff1a;一、核心&#xff1a;开启 Redis 持久化&#xff08;防止进程崩溃丢失数据&#xff09;Redis 提供两种持久化方式&#xff0c;可…

NUMA/SNC 4种组合下Stream+MLC性能对决:双路服务器BIOS调优全攻略

关于调整 BIOS NUMA 与 SNC 选项的 Stream / MLC 性能测试总结一、测试背景与目的在现代多路 Intel Xeon 服务器上&#xff0c;NUMA&#xff08;Non-Uniform Memory Access&#xff09;与 SNC&#xff08;Sub-NUMA Clustering&#xff09;是两项决定内存访问延迟与带宽的关键 B…

Java-113 深入浅出 MySQL 扩容全攻略:触发条件、迁移方案与性能优化

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布&#xff01;“快的…

Kafka Connect + Streams 用到极致从 CDC 到流处理的一套落地方案

关键目标&#xff1a; 零丢失&#xff1a;端到端 Exactly Once&#xff08;Source 端事务 Streams exactly_once_v2 Sink DLQ&#xff09;。低延迟&#xff1a;Producer 端批量压缩 Streams 缓存 合理 poll/commit 间隔。可恢复&#xff1a;Connect/Streams 的 rebootstrap…

# `std::basic_istream`总结

std::basic_istream总结 文章目录std::basic_istream总结概述常用类型定义全局对象核心成员函数1. 格式化输入2. 非格式化输入3. 流定位4. 其他功能继承的功能来自 std::basic_ios状态检查状态管理来自 std::ios_base格式化标志流打开模式特点说明例子std::basic_istream全面用…

人工智能——课程考核

课程考核包括平时测验&#xff08;75%&#xff09;和讨论&#xff08;25%&#xff09;两个环节&#xff0c;测验采用线上随堂考试&#xff08;2-3次&#xff0c;具体会在本课堂发布&#xff09;重点考核&#xff1a;A*算法、极大极小过程&#xff08;α-β剪枝&#xff09;、不…

机器学习-时序预测1

最近面试过程中&#xff0c;Predict-then-Optimize是运筹优化算法工程师未来的发展方向。就像我之前写过的运筹优化&#xff08;OR&#xff09;-在机器学习&#xff08;ML&#xff09;浪潮中何去何从&#xff1f;-CSDN博客&#xff0c;机器学习适合预测、运筹优化适合决策。我研…

vim-plugin AI插件

文章目录一、vim 插件管理vim-plug二、如何使用和配置 vim-plug第 1 步&#xff1a;安装 vim-plug第 2 步&#xff1a;配置你的 .vimrc / init.vim第 3 步&#xff1a;安装插件常用 vim-plug 命令三、配置vim-aivim-aivim-deepseekvim升级四、配置 AI 插件GitHub Copilot第 1 步…

Adobe Photoshop 2025 最新下载安装教程,附PS2025下载

点击获取&#xff1a;Adobe Photoshop 2025 安装教程&#xff1a; 1、安装包下载后&#xff0c;鼠标右键解压安装包 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 2、双击打开解压后的安装包文件夹 3、打开setup文件夹 添加图片注释&#xff0c;不超过…

LeetCode算法日记 - Day 27: 计算右侧小于当前元素的个数、翻转对

目录 1. 计算右侧小于当前元素的个数 1.1 题目解析 1.2 解法 1.3 代码实现 2. 翻转对 2.1 题目解析 2.2 解法 2.3 代码实现 1. 计算右侧小于当前元素的个数 315. 计算右侧小于当前元素的个数 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xf…

基于SamOut的音频Token序列生成模型训练指南

通过PyTorch实现从音频特征到语义Token的端到端序列生成&#xff0c;适用于语音合成、游戏音效生成等场景。&#x1f9e0; 模型架构与核心组件 model SamOut(voc_sizevoc_size, # 词汇表大小&#xff08;4098目录名特殊Token&#xff09;hidden_sizehidden_size, …

AWD攻防总结

基本防守策略 1、改用户密码和服务密码 1&#xff09;改linux用户密码&#xff1a; #passwd 如果有权限就删除用户&#xff1a; #userdel -r [用户名] 2&#xff09;改mysql密码&#xff1a; #update mysql.user set passwordpassword(密码) where userroot; 删除匿名用户&…

Android14 基于Configfs的USB动态配置init.usb.configfs.rc

1 Android14 USB子系统启动以及动态切换的init.usb.rc 2 Android14 基于Configfs的USB动态配置init.usb.configfs.rc 3 Android14 高通平台的USB子系统启动和动态配置init.qcom.usb.rc 1. 什么是ConfigFS ConfigFS 是 Linux 内核提供的一种用户空间可配置的伪文件系统在Linu…

2025年KBS SCI1区TOP,矩阵差分进化算法+移动网络视觉覆盖无人机轨迹优化,深度解析+性能实测

目录1.摘要2.系统模型和问题表述3.矩阵差分进化算法4.结果展示5.参考文献6.算法辅导应用定制读者交流1.摘要 本文提出了一种面向无人机&#xff08;UAV&#xff09;新型轨迹优化方法&#xff0c;以实现对地面移动节点的高效视觉覆盖。与传统方法不同&#xff0c;该方法显式考虑…

Python OpenCV图像处理与深度学习:Python OpenCV图像几何变换入门

图像变换&#xff1a;掌握OpenCV中的几何变换 学习目标 通过本课程&#xff0c;学员们将能够理解图像的几何变换原理&#xff0c;包括缩放、旋转和平移&#xff0c;并能够使用Python和OpenCV库实现这些变换。本课程将通过理论讲解与实践操作相结合的方式&#xff0c;帮助学员们…