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

TypeScript:如何将分组中的空字符串替换为指定值(如Others)

没问题,我来帮你调整代码实现需求!

解决方案

你当前的代码在处理不含下划线的name字段时,会因为indexOf('_')返回-1,导致substr(0, -1)得到空字符串,进而产生空分组。我们只需要在获取分组键的环节,加上空值判断并替换成指定名称即可。

修改后的完整代码

let rawData = [ 
  { name : 'orders_list', id : 10}, 
  { name : 'orders_price', id : 7}, 
  { name : 'items_list', id : 12 }, 
  { name : 'items_price', id : 7}, 
  { name : 'others-list', id : 7}, 
  { name : 'secondOthers-list', id : 7}, 
];

// 自定义默认分组名称,方便后续修改
const defaultGroupName = 'Others';

let data = rawData.reduce((r, e) => {
  // 获取下划线分割后的第一个部分
  let group = e.name.substr(0, e.name.indexOf('_'));
  
  // 若分组为空(即当前项name不含下划线),替换为默认名称
  if (!group) {
    group = defaultGroupName;
  }
  
  if(!r[group]) { 
    r[group] = {group, children: [e]} 
  } else { 
    r[group].children.push(e); 
  } 
  return r; 
}, {}); 

let result = Object.values(data);
console.log(result);

关键优化点

  • 新增了defaultGroupName变量,你可以随时修改这个值来替换默认分组的名称
  • 增加空分组判断:当group为空字符串时,自动替换为你指定的默认名称
  • 最终会得到三个符合预期的分组:orders、items和Others

如果你想让分割逻辑更直观,也可以用split方法替代substr,效果是一样的:

// 替代原group获取逻辑的写法
let parts = e.name.split('_');
let group = parts.length > 1 ? parts[0] : defaultGroupName;

运行修改后的代码,就能得到你想要的分组结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:07:47