讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript:根据数据属性创建唯一数组集合

千芳大大_3955

千芳大大_3955

发布时间:2025-11-10 11:24:12

|

1030人浏览过

|

来源于php中文网

原创

JavaScript:根据数据属性创建唯一数组集合

本教程详细介绍了如何利用 javascript 遍历 html 元素,并根据其自定义数据属性(如 `data-tab`)动态地将相关数据分组到不同的唯一数组或对象中。通过获取 dom 元素、初始化数据容器以及迭代处理每个元素的属性,最终生成一个结构化的 javascript 对象,其中每个键对应一个唯一的 `data-tab` 值,其值则是一个包含该分组下所有元素详细信息的数组,适用于管理和展示大量结构化数据。

引言

在前端开发中,我们经常需要从 HTML 页面中提取数据并进行结构化处理。当页面中存在大量具有相似结构但特定属性值不同的元素时,将这些元素按照某个共同的属性进行分组,是数据组织和管理的重要一环。例如,我们可能有一系列产品卡片,需要根据它们的类别(如“专业版”、“经济版”)进行分组,以便后续的筛选、展示或数据分析。

场景描述与目标

假设我们有以下一系列 hidden 类型的 input 元素,它们通过自定义数据属性 data-size、data-color 和 data-tab 存储了产品信息:

<input hidden data-size="120x40" data-color="Brown" data-tab="Gardenbox Professional">
<input hidden data-size="160x40" data-color="Brown" data-tab="Gardenbox ECO">
<input hidden data-size="120x40" data-color="Red" data-tab="Gardenbox Professional">
<input hidden data-size="160x40" data-color="Red" data-tab="Gardenbox ECO">
<!-- 更多类似的 input 元素,可能有50个或更多 -->

我们的目标是使用 JavaScript,根据 data-tab 属性的值,将这些 input 元素的数据分组到不同的数组中。最终期望得到一个 JavaScript 对象,其中每个键是唯一的 data-tab 值,而对应的值是一个数组,该数组包含了所有属于该 data-tab 分组的元素详细信息(例如 size、color 和 tab)。

实现步骤

实现这一目标主要分为以下几个步骤:

java后端编程
java后端编程

专用于 Java Spring Boot 后端开发的专业技能。当用户提出以下需求时,应调用此技能:构建 REST API、创建 Spring Boot 项目、编写 Java 后端服务、配置数据库访问(JPA / MyBatis)、处理认证与授权(Spring Security / JWT)、实现微服务架构(Spring Cloud)、排查 Spring Boot 相关错误、审查 Java 代码质量,或执行任何与 Spring Boot / Java 后端相关的任务。

下载

立即学习“Java免费学习笔记(深入)”;

  1. 获取所有目标元素: 首先,我们需要选择页面上所有符合条件的 input 元素。
  2. 初始化结果容器: 创建一个空的 JavaScript 对象,用于存储最终的分组结果。
  3. 遍历并分组数据: 遍历每个获取到的 input 元素,提取其 data-tab 值作为分组的键,并将元素的其他数据属性组织成子对象,然后添加到对应分组的数组中。

完整代码示例

以下是实现上述功能的 JavaScript 代码:

// 步骤 1: 获取页面上所有 'input' 元素
var inputs = document.querySelectorAll('input');    

// 步骤 2: 初始化一个空对象,用于存储最终的分组结果
var groupedData = {};

// 步骤 3: 遍历每个 input 元素并进行数据分组
for (var i = 0; i < inputs.length; i++) {
  // 获取当前元素的 data-tab 属性值
  var tabValue = inputs[i].getAttribute('data-tab');

  // 检查 groupedData 对象是否已经存在以 tabValue 为键的属性
  // 如果不存在,则创建一个新的空数组作为该键的值
  if (!groupedData.hasOwnProperty(tabValue)) {
    groupedData[tabValue] = [];
  }

  // 创建一个子对象,用于存储当前元素的详细数据
  var subObject = {};
  subObject["size"] = inputs[i].getAttribute('data-size');
  subObject["color"] = inputs[i].getAttribute('data-color');
  subObject["tab"] = tabValue; // 直接使用已获取的 tabValue

  // 将子对象添加到对应 tabValue 的数组中
  groupedData[tabValue].push(subObject); 
}

// 打印最终分组结果到控制台
console.log(groupedData);

运行上述代码后,console.log(groupedData) 将输出类似以下结构的对象:

{
  "Gardenbox Professional": [
    { "size": "120x40", "color": "Brown", "tab": "Gardenbox Professional" },
    { "size": "120x40", "color": "Red", "tab": "Gardenbox Professional" }
  ],
  "Gardenbox ECO": [
    { "size": "160x40", "color": "Brown", "tab": "Gardenbox ECO" },
    { "size": "160x40", "color": "Red", "tab": "Gardenbox ECO" }
  ]
}

代码解析

  1. document.querySelectorAll('input'): 这行代码用于选择文档中所有 input 标签的元素,并返回一个 NodeList。
  2. var groupedData = {};: 初始化一个空对象 groupedData。这个对象将是最终结果的容器,它的键将是 data-tab 的唯一值,而值将是包含相应数据项的数组。
  3. for (var i = 0; i < inputs.length; i++) { ... }: 这是一个标准的 for 循环,用于遍历 inputs NodeList 中的每一个元素。
  4. var tabValue = inputs[i].getAttribute('data-tab');: 在每次循环中,获取当前 input 元素的 data-tab 属性值。
  5. if (!groupedData.hasOwnProperty(tabValue)) { groupedData[tabValue] = []; }: 这是一个关键的逻辑判断。它检查 groupedData 对象是否已经拥有一个以当前 tabValue 为键的属性。如果 hasOwnProperty 返回 false(表示不存在该键),则说明这是一个新的 data-tab 分组,因此会为它创建一个新的空数组。
  6. var subObject = {}; ...: 创建一个临时的 subObject,用于存储当前 input 元素的所有相关数据属性。这里我们提取了 data-size、data-color 和 data-tab。
  7. groupedData[tabValue].push(subObject);: 将创建好的 subObject 添加到 groupedData 对象中对应 tabValue 的数组里。

注意事项与优化

  • 使用 dataset API: 对于 data-* 属性,JavaScript 提供了更简洁的 dataset API。例如,inputs[i].getAttribute('data-tab') 可以替换为 inputs[i].dataset.tab。使用 dataset 可以使代码更具可读性。
    // 使用 dataset API 的示例
    var tabValue = inputs[i].dataset.tab;
    subObject["size"] = inputs[i].dataset.size;
    subObject["color"] = inputs[i].dataset.color;
  • 错误处理: 如果某些 input 元素可能缺少 data-tab 属性,getAttribute('data-tab') 或 dataset.tab 将返回 null 或 undefined。在这种情况下,tabValue 可能会变成 "null" 或 "undefined" 字符串,导致数据被错误地分组。可以添加检查来处理这种情况,例如:
    var tabValue = inputs[i].dataset.tab || 'unknown'; // 如果不存在,则归类到 'unknown'
  • 性能考量: 对于非常大量的 DOM 元素(例如数千个),频繁的 DOM 操作(getAttribute)可能会有轻微的性能开销。然而,对于本例中的几十个或几百个元素,这种方法是完全可接受且高效的。
  • 函数式编程替代方案: 熟悉 ES6+ 的开发者可能会倾向于使用 Array.prototype.reduce() 方法来实现更函数式的分组逻辑,代码会更紧凑,但对于初学者来说,for 循环可能更直观。

总结

通过本教程,我们学习了如何利用 JavaScript 遍历 HTML 元素,并根据其自定义数据属性(如 data-tab)将数据动态地分组到结构化的 JavaScript 对象中。这种模式在处理和组织前端数据时非常实用,能够帮助开发者高效地管理和利用页面上的结构化信息,为后续的数据展示、过滤和交互奠定基础。掌握这种数据分组技术,能够显著提升前端数据处理的灵活性和代码的可维护性。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

285

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

406

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

375

2025.12.24

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1678

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1758

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2724

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6104

2023.10.24

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn