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
相关产品推荐
相关产品推荐

