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

JavaScript中如何按属性名后缀匹配并分组对象属性

按属性名数字后缀分组对象属性实现方案

核心实现逻辑是通过正则锚定属性名末尾.后的数字作为分组标识,遍历属性分桶存储后按数字顺序输出数组,可直接运行的代码如下:

// 原始待处理对象
const sourceObj = {
  "q_A.1": "info",
  "q_B.1": "info2",
  "q_C.1": "info3",
  "q_D.1": "info4",
  "q_A.2": "information",
  "q_B.2": "information2",
  "q_C.2": "information3",
  "q_D.2": "information4",
};

function groupObjBySuffixNum(obj) {
  const groupMap = {};
  for (const key of Object.keys(obj)) {
    // 匹配属性名末尾.后的数字后缀
    const matchRes = key.match(/\.(\d+)$/);
    if (!matchRes) continue;
    const suffixNum = matchRes[1];
    if (!groupMap[suffixNum]) groupMap[suffixNum] = {};
    groupMap[suffixNum][key] = obj[key];
  }
  // 按后缀数字升序排列后返回分组数组
  return Object.entries(groupMap)
    .sort(([a], [b]) => Number(a) - Number(b))
    .map(([, group]) => group);
}

const result = groupObjBySuffixNum(sourceObj);

之前正则方案不生效的常见原因:

  • 正则未加$锚定字符串末尾,会误匹配属性名中间位置的数字,导致分组错乱
  • 提取到的后缀未做统一处理,分组初始化逻辑缺失导致属性写入失败
  • 最终输出未按后缀数字排序,分组顺序和预期不符

注意:属性名包含.这类特殊字符时,对象定义阶段必须给属性名包裹字符串引号,否则会直接触发JS语法错误。

代码运行后输出的结果和预期结构完全一致:

[
  {
    "q_A.1": "info",
    "q_B.1": "info2",
    "q_C.1": "info3",
    "q_D.1": "info4"
  },
  {
    "q_A.2": "information",
    "q_B.2": "information2",
    "q_C.2": "information3",
    "q_D.2": "information4"
  }
]

内容的提问来源于stack exchange,提问作者sooraj s pillai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:03:11