如何将具有相同数字后缀的键值对自动配对并生成结构化对象数组

浅辰大大_3504

浅辰大大_3504

2026-01-20

1001人浏览

原创

如何将具有相同数字后缀的键值对自动配对并生成结构化对象数组

本文介绍一种通用方法,将对象中键名含相同数字后缀(如 `lote0` 与 `loteqnt0`)的键值对提取、分组并合并为统一结构的对象数组,适用于表单字段、配置映射等场景。

在实际开发中,我们常遇到一类“成对命名”的扁平化数据结构:例如后端返回的键名为 lote0、loteQnt0、lote1、loteQnt1 等,它们隐含逻辑关联——数字后缀(0, 1, 2…)是分组标识,而前缀(如 lote 和 loteQnt)代表语义角色(如名称与数值)。目标是将这些键值按数字归组,生成结构清晰的对象数组,如 { name: 'jg', value: 'jgvalue' }。

以下是一个健壮、可扩展的实现方案:

科学计算器在线使用工具代码
科学计算器在线使用工具代码

html5 css3制作在线科学计算器ui布局,3D计算器面板,加减乘除数字计算器工具特效。

下载

✅ 核心思路

  1. 提取所有键的数字后缀:使用正则 /(\d+)$/ 匹配末尾数字;
  2. 按数字分组键值对:构建 Map,以数字为 key,收集所有匹配该数字的键值;
  3. 定义字段映射规则:指定前缀到目标属性的映射(如 'lote' → 'name', 'loteQnt' → 'value');
  4. 生成结果数组:遍历每个数字组,按映射规则组装对象。

? 完整代码实现

const vls = {
  "lote0": "jg",
  "lote1": "h",
  "lote2": "fm",
  "loteQnt0": "jgvalue",
  "loteQnt1": "hvalue",
  "loteQnt2": "fmvalue"
};

// 步骤1:定义前缀→目标属性的映射关系(可灵活扩展)
const prefixToField = {
  lote: 'name',
  loteQnt: 'value'
};

// 步骤2:按数字后缀分组
const groupedByNumber = new Map<number record string>>();

Object.entries(vls).forEach(([key, value]) => {
  const match = key.match(/(\d+)$/);
  if (!match) return;
  const num = parseInt(match[1], 10);

  if (!groupedByNumber.has(num)) {
    groupedByNumber.set(num, {});
  }
  const group = groupedByNumber.get(num)!;

  // 提取前缀(移除末尾数字)
  const prefix = key.replace(/\d+$/, '');
  group[prefix] = value;
});

// 步骤3:按映射规则生成最终对象数组
const result = Array.from(groupedByNumber.entries())
  .map(([_, group]) => {
    const obj: Record<string string> = {};
    Object.entries(prefixToField).forEach(([prefix, field]) => {
      if (group[prefix] !== undefined) {
        obj[field] = group[prefix];
      }
    });
    return obj;
  });

console.log(result);
// 输出:
// [
//   { name: 'jg', value: 'jgvalue' },
//   { name: 'h', value: 'hvalue' },
//   { name: 'fm', value: 'fmvalue' }
// ]</string></number>

⚠️ 注意事项

  • 健壮性:本方案自动忽略无数字后缀或无法解析数字的键,避免运行时错误;
  • 可扩展性:只需修改 prefixToField 映射对象,即可支持更多字段类型(如添加 'loteDesc' → 'description');
  • 顺序保证:Array.from(groupedByNumber.keys()) 默认按插入顺序(即数字升序),若需严格排序,可在 .map() 前加 .sort((a, b) => a - b);
  • 性能友好:仅遍历原始对象一次,时间复杂度 O(n),适合中等规模数据(数千项内)。

✅ 总结

相比硬编码过滤(如分别 filter(...lote\d+) 和 filter(...loteQnt\d+)),本方案通过正则提取数字 + 动态前缀映射,实现了高内聚、低耦合的数据重组逻辑。它不仅解决了当前需求,更可作为通用工具函数封装复用,显著提升处理类似命名约定数据的开发效率与可维护性。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

键值对

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

7559

3

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1158

7

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.01

2921

7

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

2025.12.22

416

20

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

2026.01.06

437

22

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

2026.05.09

512

25

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

750

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

343

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

553

20

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM Programmer’s Manual
LLVM Programmer’s Manual

共0课时 | 0人学习

Fitten Code官方手册
Fitten Code官方手册

共0课时 | 0人学习

CodeGeex使用手册
CodeGeex使用手册

共0课时 | 0人学习