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

