第 7 篇:JavaScript 数组与循环实战 —— 批量处理页面数据与列表渲染
在前几篇内容里,我们掌握了 JavaScript 基础语法、DOM 操作、事件监听,也完成了个人博客页面的搭建与适配。但在实际开发中,页面往往会出现大量重复数据:比如博客文章列表、标签列表、分类菜单等。
如果每一条数据都手动写 HTML 标签,不仅代码冗余,后期维护也十分麻烦。而 数组 + 循环 就是 JS 批量处理数据的核心组合。
本篇我们重点讲解数组常用操作、循环语句实战,结合博客项目完成动态列表渲染,彻底告别手写重复标签,同时梳理新手在数组和循环中高频踩坑的问题。
一、认识数组:批量存储数据的容器
数组是 JavaScript 中用来存放一组数据的集合,不管是文字、数字、对象,都可以统一放在数组中管理,也是前端开发使用频率最高的数据结构之一。
1. 数组的基础定义与取值
javascript
运行
// 1. 字面量方式创建数组(开发最常用)
let arr = ["HTML", "CSS", "JavaScript", "响应式"];
// 2. 获取数组单个元素:通过下标(索引)取值,下标从 0 开始
console.log(arr[0]); // 输出:HTML
console.log(arr[2]); // 输出:JavaScript
// 3. 获取数组长度 length
console.log(arr.length); // 输出:4
核心要点:
- 数组下标从 0 开始计数,这是新手最容易混淆的点;
length属性可以直接获取数组内元素总个数,搭配循环使用效率极高。
2. 数组常用增删改查方法
日常开发中,以下几个方法可以满足 90% 的数组操作需求:
javascript
运行
let list = ["前端入门", "CSS实战"];
// 末尾添加元素 push()
list.push("JS交互");
// 末尾删除元素 pop()
list.pop();
// 头部添加元素 unshift()
list.unshift("HTML基础");
// 头部删除元素 shift()
list.shift();
// 修改指定下标的元素
list[0] = "全新标题";
二、循环语句:批量遍历数组
想要把数组里的每一条数据渲染到页面,就需要用到循环。前面简单介绍过 for 循环,这里结合数组做深度实战,同时区分不同循环的使用场景。
1. 基础 for 循环(通用首选)
语法结构:
javascript
运行
for(初始化变量; 循环条件; 变量自增){
// 循环执行的代码
}
结合数组遍历示例:
javascript
运行
// 文章标题数组
let articleTitles = [
"HTML基础入门",
"CSS美化与布局",
"JavaScript交互实战",
"响应式页面适配"
];
// 遍历数组
for(let i = 0; i < articleTitles.length; i++){
// 依次打印每一个标题
console.log(articleTitles[i]);
}
执行逻辑:
- 定义变量
i作为下标,初始值为 0; - 判断
i是否小于数组长度,满足条件则执行循环体; - 执行完毕后
i++,下标向后移动一位,再次判断条件; - 条件不成立时,循环终止。
2. for...of 循环(快速取值,简化代码)
如果只需要获取数组元素,不需要操作下标,可以使用 for...of,代码更简洁:
javascript
运行
for(let item of articleTitles){
console.log(item); // 直接取出数组中的每一项
}
三、实战演练:动态渲染博客文章列表
前面的博客页面,所有文章卡片都是手写 HTML 完成。现在我们用数组存储文章数据 + for 循环 + DOM 操作,实现动态渲染列表,数据和结构分离。
1. 改造 HTML 结构
保留容器,删除手动编写的文章卡片:
html
预览
<!-- 左侧:文章列表 -->
<section class="article-list">
<!-- 文章由 JS 动态生成 -->
</section>
2. JS 代码实现动态渲染
我们用对象数组存储每一篇文章的完整信息(标题、时间、阅读量、摘要),再通过循环拼接 HTML 结构,最后插入到页面中。
javascript
运行
document.addEventListener("DOMContentLoaded", function() {
// 1. 用对象数组存储所有文章数据
let articleData = [
{
title: "CSS入门实战,30分钟搞定网页美化与基础布局",
date: "2026-04-25",
views: "201",
excerpt: "上一篇我们学会了用HTML搭建网页的“骨架”,但只有骨架的网页难免单调……"
},
{
title: "HTML基础入门——从“骨架”开始,避开新手必踩的3个坑",
date: "2026-04-25",
views: "34",
excerpt: "HTML是网页的基础,就像盖房子的地基和钢筋骨架,决定了网页的结构和内容……"
},
{
title: "JavaScript入门——给网页装上“灵魂”,从基础交互到DOM操作",
date: "2026-04-26",
views: "120",
excerpt: "HTML和CSS让网页有了结构和样式,但此时的网页还只是一张“静态海报”……"
}
];
// 2. 获取文章列表容器
const articleList = document.querySelector(".article-list");
// 定义变量,拼接HTML字符串
let htmlStr = "";
// 3. for循环遍历数组,拼接每一篇文章的HTML结构
for(let i = 0; i < articleData.length; i++){
let item = articleData[i];
htmlStr += `
<article class="article-card">
<div class="article-header">
<h2 class="article-title">
<a href="#">${item.title}</a>
</h2>
<div class="article-meta">
<span class="date">${item.date}</span>
<span class="views">阅读 ${item.views}</span>
</div>
</div>
<div class="article-excerpt">
<p>${item.excerpt}</p>
</div>
<a href="#" class="read-more">阅读全文 →</a>
</article>
`;
}
// 4. 将拼接好的HTML插入到页面中
articleList.innerHTML = htmlStr;
});
3. 效果与优势说明
- 页面效果和之前手写代码完全一致;
- 后续新增、删除、修改文章,只需要修改数组数据,不用改动 HTML 结构,维护效率大幅提升;
- 这也是企业级开发中列表渲染的基础思路。
四、拓展实战:动态渲染侧边栏热门文章
沿用相同逻辑,我们再实现侧边栏热门文章的动态渲染,举一反三:
HTML 修改
html
预览
<ul class="hot-articles">
<!-- 热门文章由JS动态生成 -->
</ul>
JS 补充代码
javascript
运行
// 热门文章数据数组
let hotData = [
"CSS入门实战,30分钟搞定网页美化与基础布局",
"HTML基础入门——从“骨架”开始,避开新手必踩的3个坑",
"JavaScript入门——给网页装上“灵魂”"
];
const hotList = document.querySelector(".hot-articles");
let hotHtml = "";
for(let i = 0; i < hotData.length; i++){
hotHtml += `<li><a href="#">${hotData[i]}</a></li>`;
}
hotList.innerHTML = hotHtml;
五、新手高频坑点与解决方案
1. 下标越界报错
现象:循环取值出现 undefined 原因:循环条件写成 i <= arr.length,数组最大下标为 length - 1 解决:统一使用 i < arr.length 作为循环条件。
2. 循环外部无法获取循环内变量
原因:旧版书写习惯或变量作用域问题 解决:循环内部变量使用 let 声明,不要使用 var。
3. 拼接 HTML 出现格式混乱
原因:字符串拼接符号使用错误、引号嵌套冲突 解决:优先使用 模板字符串 (反引号),支持换行和直接嵌入变量 ${}。
4. 多次渲染导致内容重复
现象:触发事件后,列表内容不断叠加 原因:没有清空原有内容,直接拼接新 HTML 解决:拼接前清空容器,或每次重新生成完整字符串再赋值。
六、结语
数组和循环是 JavaScript 从 “简单交互” 走向 “数据驱动页面” 的关键一步。通过本篇学习,你掌握了数组的基础操作、多种循环用法,并且在原有博客项目中完成了列表动态渲染。
现在你的项目已经实现了数据与结构分离,更贴近真实开发场景。
下一篇我们将学习函数封装与代码复用,把重复的逻辑抽离成独立函数,让代码更简洁、可读性更强,进一步提升代码规范度。
更多推荐
所有评论(0)