【前端教程】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
英文地址,請注明出處:http://en.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;幫助學員們…