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

Node.js中如何拆分JSON数组含逗号的tenor字段为单个对象

解决JSON数组中带逗号的Tenor字段拆分问题

你遇到的问题很典型——你的代码把拆分后的数组直接作为元素push进去了,而且没有移除原来包含逗号的条目,所以结果里出现了嵌套数组和重复的原条目。咱们来一步步修正:

问题分析

  • 嵌套数组的原因:你用arrayCoba.push(dataTenor)时,dataTenor是map返回的数组(比如[{tenor:"27"},{tenor:"29"}]),所以push后arrayCoba里存的是数组元素,后续concat就会把这些数组直接作为元素加入结果,导致嵌套。
  • 原条目未移除:你只是把新拆分的内容追加到原data数组后面,没有删掉原来带逗号的那些对象,所以结果里同时保留了原条目和拆分后的内容。

正确的实现方式

最简单的方法是用flatMap(ES2019+支持),它会自动把map返回的数组扁平化一层,完美适配这个场景:

// 原数据
const originalResponse = { 
  "status": 1, 
  "message": "ok", 
  "data": [ 
    { "tenor": "23" }, 
    { "tenor": "17" }, 
    { "tenor": "37" }, 
    { "tenor": "27,29" }, 
    { "tenor": "33,35" } 
  ] 
};

// 处理data数组:拆分带逗号的tenor,转成独立对象
const processedData = originalResponse.data.flatMap(item => {
  // 拆分tenor字符串
  const tenorList = item.tenor.split(',');
  // 每个拆分后的字符串转成{tenor: ...}对象,加trim防止有空格(可选)
  return tenorList.map(tenor => ({ tenor: tenor.trim() }));
});

// 构建最终返回的对象
const finalResponse = {
  ...originalResponse,
  data: processedData
};

return res.json(finalResponse);

如果你需要兼容旧环境,也可以用reduce来实现:

const processedData = originalResponse.data.reduce((result, item) => {
  const tenorList = item.tenor.split(',');
  // 把每个拆分后的tenor对象push到结果数组
  tenorList.forEach(tenor => {
    result.push({ tenor: tenor.trim() });
  });
  return result;
}, []);

const finalResponse = {
  ...originalResponse,
  data: processedData
};

return res.json(finalResponse);

效果验证

运行上面的代码后,你会得到想要的结果:

{
  "status": 1,
  "message": "ok",
  "data": [
    { "tenor": "23" },
    { "tenor": "17" },
    { "tenor": "37" },
    { "tenor": "27" },
    { "tenor": "29" },
    { "tenor": "33" },
    { "tenor": "35" }
  ]
}

内容的提问来源于stack exchange,提问作者Ratri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:50