You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并对象中含相同数字后缀的键值对,返回对象数组

合并对象中带相同数字后缀的键值对

我需要将对象里带有相同数字后缀的键值对合并为单个对象。例如,alfa0: 'theValueOfAlfa'和beta0: 'theValueOfBeta'这类共享数字后缀0的键,要合并成如下结构:

{
  name: 'theValueOfAlfa',
  value: 'theValueOfBeta'
}

给定源对象:

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

期望输出为包含合并后对象的数组:

const result = [
 {
   name: 'jg',
   value: 'jgvalue'
 },
 {
   name: 'h',
   value: 'hvalue'
 },
 {
   name: 'fm',
   value: 'fmvalue'
 }
]

解决方案

针对固定前缀的实现

如果明确lote开头的键对应name字段,loteQnt开头的对应value字段,可以用以下代码:

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

const groups = {};

// 遍历对象的所有键
Object.keys(vls).forEach(key => {
  // 提取键末尾的数字后缀
  const suffixMatch = key.match(/(\d+)$/);
  if (suffixMatch) {
    const suffix = suffixMatch[1];
    // 初始化分组对象(如果不存在)
    groups[suffix] = groups[suffix] || {};
    
    // 根据键前缀分配对应字段
    if (key.startsWith('lote') && !key.startsWith('loteQnt')) {
      groups[suffix].name = vls[key];
    } else if (key.startsWith('loteQnt')) {
      groups[suffix].value = vls[key];
    }
  }
});

// 将分组对象转换为数组
const result = Object.values(groups);
console.log(result);

更通用的实现(适配不同前缀)

如果需要适配更多前缀类型,只需调整字段分配的判断逻辑即可:

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

const groups = {};

// 遍历键值对
Object.entries(vls).forEach(([key, value]) => {
  const suffix = key.match(/\d+$/)[0];
  // 初始化分组
  if (!groups[suffix]) groups[suffix] = {};
  
  // 根据键的特征分配字段,可按需修改
  if (key.includes('Qnt')) {
    groups[suffix].value = value;
  } else {
    groups[suffix].name = value;
  }
});

const result = Object.values(groups);

内容的提问来源于stack exchange,提问作者Nilton Schumacher F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:45:18