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

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

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

引言

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

场景描述与目标

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

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

实现步骤

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

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

获取所有目标元素: 首先,我们需要选择页面上所有符合条件的 input 元素。初始化结果容器: 创建一个空的 JavaScript 对象,用于存储最终的分组结果。遍历并分组数据: 遍历每个获取到的 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" }  ]}

代码解析

document.querySelectorAll(‘input’): 这行代码用于选择文档中所有 input 标签的元素,并返回一个 NodeList。var groupedData = {};: 初始化一个空对象 groupedData。这个对象将是最终结果的容器,它的键将是 data-tab 的唯一值,而值将是包含相应数据项的数组。for (var i = 0; i : 这是一个标准的 for 循环,用于遍历 inputs NodeList 中的每一个元素。var tabValue = inputs[i].getAttribute(‘data-tab’);: 在每次循环中,获取当前 input 元素的 data-tab 属性值。if (!groupedData.hasOwnProperty(tabValue)) { groupedData[tabValue] = []; }: 这是一个关键的逻辑判断。它检查 groupedData 对象是否已经拥有一个以当前 tabValue 为键的属性。如果 hasOwnProperty 返回 false(表示不存在该键),则说明这是一个新的 data-tab 分组,因此会为它创建一个新的空数组。var subObject = {}; …: 创建一个临时的 subObject,用于存储当前 input 元素的所有相关数据属性。这里我们提取了 data-size、data-color 和 data-tab。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 对象中。这种模式在处理和组织前端数据时非常实用,能够帮助开发者高效地管理和利用页面上的结构化信息,为后续的数据展示、过滤和交互奠定基础。掌握这种数据分组技术,能够显著提升前端数据处理的灵活性和代码的可维护性。

以上就是JavaScript:根据数据属性创建唯一数组集合的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1593566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
币圈常见骗局大揭秘:识别并远离这7种最新的诈骗手法
上一篇 2026年5月10日 10:37:19
流行的跨平台C++框架
下一篇 2026年5月10日 10:37:22

相关推荐

  • GolangWeb项目路由优化与请求调度实践

    模块化路由设计提升Golang Web系统可维护性与性能。通过gin等框架按业务拆分路由组,实现清晰结构(如SetupUserRoutes管理用户路由);利用中间件分层调度,全局日志、局部权限校验(如AuthMiddleware作用于/api组)提升复用与安全;优化路由匹配,采用静态路径、减少嵌套、…

    2026年5月10日
    000
  • Blazor JS Interop 调用 Geolocation API 教程

    在 Blazor 中调用 Geolocation API 需通过 JS Interop:JavaScript 封装 navigator.geolocation 为 Promise 函数 getLocation,C# 使用 IJSRuntime.InvokeAsync 调用并匹配字段名,同时处理权限拒…

    2026年5月10日
    000
  • 如何精确获取多组单选按钮的最终选中值

    本教程旨在解决前端开发中,如何高效且准确地获取多组单选按钮(如产品变体选项)的最终选中值。我们将探讨在“添加到购物车”等操作触发时,避免中间选择状态干扰,仅捕获用户最终确认选项的最佳实践,并通过JavaScript代码示例详细演示其实现方法,确保数据一致性与用户体验。 场景描述与挑战 在电子商务网站…

    2026年5月10日
    000
  • HTMLpositionrelativeabsolutefixed格式属性区别

    relative 相对于自身原位置偏移但保留占位;2. absolute 脱离文档流,相对于最近非 static 祖先定位;3. fixed 相对于视口固定,不随滚动移动。 在HTML和CSS中,position 属性用于控制元素的定位方式。常见的取值有 relative、absolute 和 fi…

    2026年5月10日
    000
  • 如何处理图像EXIF方向并转换为Base64,避免数据丢失

    本教程旨在解决图像EXIF方向信息在转换为Base64编码过程中丢失的问题。通过结合使用piexif库提取并移除EXIF方向数据,以及Jimp库对图像进行实际旋转,我们可以确保生成的Base64图像在视觉上保持正确的方向,从而满足API调用等需求,避免因EXIF元数据丢失而导致的显示错误。 在处理图…

    2026年5月10日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2026年5月10日
    000
  • 如何解决团队协作时HTML合并冲突的详细步骤

    答案是通过理解Git冲突原因、使用编辑器工具处理冲突块、验证HTML完整性并提交解决结果,可有效应对团队协作中的HTML合并冲突。具体包括:1. 明确冲突因多分支修改同一代码行导致;2. 利用VS Code等工具对比并整合“HEAD”与“传入更改”;3. 合并class等属性并确保标签闭合;4. 用…

    2026年5月10日
    000
  • HTML删除线怎么实现_HTML删除线如何标注修改或过期内容

    使用标签可语义化标注删除内容,适合文档修订和价格变更,支持cite和datetime属性;2. 通过CSS的text-decoration: line-through实现视觉删除线,适用于静态过期信息或自定义样式;3. 结合与标签能完整展示修改记录,增强可读性与可访问性。 在HTML中实现删除线,最…

    2026年5月10日
    000
  • Linux Zim Wiki嵌入,HTML+CSS语法高亮笔记!

    启用Zim Wiki的“代码块”插件并选择HTML/CSS语法模式可实现语法高亮,通过插入代码块、添加html或css标识符,并自定义CSS样式文件中的背景、字体和边框规则,提升代码可读性与视觉效果。 如果您在使用Zim Wiki记录技术笔记时,希望嵌入HTML和CSS代码并实现语法高亮显示,可以通…

    2026年5月10日
    000
  • 为什么HTML input字段不能自动换行?以及如何实现多行文本输入

    html 元素本质上是为单行文本输入设计的,不具备自动换行功能,也无法通过css或其他属性实现多行文本输入。当需要用户输入多行文本并支持自动换行时,必须使用 元素。本文将详细解释这两种元素的根本区别及其正确应用场景,帮助开发者选择合适的表单控件。 在网页开发中,我们经常需要从用户那里获取文本输入。H…

    2026年5月10日
    000
  • 解决Flexbox六边形网格在窄屏溢出问题:响应式单位vw的应用

    针对Flexbox六边形网格在窄屏设备上出现内容溢出的问题,本教程将深入探讨vh单位在宽度定义上的局限性。核心解决方案是改用vw(视口宽度)单位来定义六边形元素的宽度和水平边距,确保网格能根据视口宽度进行自适应缩放,从而有效避免溢出,实现完美的响应式布局。 理解窄屏溢出问题 在构建响应式布局时,尤其…

    2026年5月10日
    000
  • JavaScript RESTful API设计与实现

    答案:使用Node.%ignore_a_1%和Express可快速构建RESTful API,通过GET、POST、PUT、DELETE操作实现用户资源的增删改查,结合路由模块化、统一响应格式、输入验证与错误处理提升API质量,确保语义清晰、结构规范、易于维护。 在现代Web开发中,JavaScri…

    2026年5月10日
    000
  • 怎样编写C++的lambda表达式 捕获列表与函数对象实现原理

    怎样编写C++的lambda表达式 捕获列表与函数对象实现原理怎样编写C++的lambda表达式 捕获列表与函数对象实现原理怎样编写C++的lambda表达式 捕获列表与函数对象实现原理怎样编写C++的lambda表达式 捕获列表与函数对象实现原理

    c++++的lambda表达式通过生成匿名函数对象实现,捕获列表决定如何保存外部变量。其底层机制是编译器自动生成类并重载operator(),捕获的变量作为类成员存储;1. 值捕获([=]或[var])复制变量到lambda内部;2. 引用捕获([&]或[&var])保存变量引用;3…

    2026年5月10日 用户投稿
    100
  • html怎么设置宋体

    html设置宋体的方法:首先创建一个HTML示例文件;然后通过h1标签设置一行文本;最后通过添加“font-family:宋体;”样式设置宋体即可。 本文操作环境:windows7系统、HTML5&&CSS3版、Dell G3电脑。 设置宋体的示例如下: HTML中h1标签设置字体使…

    2026年5月10日
    000
  • 解决XPath local-name() 语法错误:表达式无效

    本文旨在帮助开发者解决在使用 Python 进行网页抓取时,遇到的 XPath local-name() 函数导致的 SyntaxError: The expression is not a legal expression 错误。通过分析问题原因,提供正确的 XPath 语法,并给出更通用的解决方…

    2026年5月10日
    000
  • 用html如何编辑网页_使用HTML代码直接编辑网页【直接】

    需用纯文本编辑器编写HTML文件,按DOCTYPE声明、html根元素、head标题、body内容结构编写,保存为UTF-8编码的.html文件,再用浏览器打开验证,修改后须手动保存并刷新。 如果您希望直接使用HTML代码编辑网页,无需依赖可视化编辑器或内容管理系统,则需要通过纯文本编辑工具编写并保…

    2026年5月10日
    000
  • html滚动条样式怎么在safari生效_html滚动条Safari浏览器适配方法

    Safari桌面版支持-webkit-scrollbar自定义滚动条,需确保元素可滚动并使用::-webkit-scrollbar、track、thumb等伪元素设置样式,同时添加border:1px solid transparent等触发渲染;而移动端Safari不支持该特性,建议保持默认样式或…

    2026年5月10日
    000
  • 什么是javascript单页应用_与传统网页有何区别?

    JavaScript单页应用(SPA)仅用一个HTML页面,通过JavaScript动态更新内容,实现局部刷新;传统网页每次跳转都请求新HTML并整页重载。 JavaScript单页应用(SPA)是指整个网站只用一个HTML页面,所有内容切换和交互都由JavaScript在浏览器端动态完成,不触发整…

    2026年5月10日
    000
  • Python中如何实现解释器模式?

    解释器模式在python中用于创建特定领域的小型语言或dsl。实现步骤包括:1.定义抽象基类expression;2.实现具体表达式类如number、plus和multiply;3.构建表达式树并通过interpret方法计算结果。该模式适合dsl实现,但不常用,因python本身强大。 在Pyth…

    2026年5月10日
    000
  • 如何利用JavaScript操作浏览器历史记录并实现单页应用路由?

    单页应用通过History API实现路由,利用pushState和replaceState修改URL不刷新页面,结合popstate监听浏览器导航,动态更新DOM内容。示例中封装Router类管理路径与处理函数,支持页面跳转与历史记录控制;需服务器配置fallback至index.html,并在J…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信