如何更简洁地从对象数组中提取格式化后的数字数组?
优化方案
可以利用正则精准匹配目标数字,简化链式调用流程,以下是两种更简洁的实现:
方案一:使用flatMap+正则匹配
const numArray = objArray.flatMap(item => { // 匹配所有{{数字}}格式的内容,提取数字部分 const matches = item.relatedId.match(/{{(\d+)}}/g); return matches ? matches.map(m => Number(m.replace(/[{}]/g, ''))) : []; }); console.log(numArray);
方案二:使用matchAll直接捕获数字组
const numArray = [].concat(...objArray.map(item => [...(item.relatedId.matchAll(/{{(\d+)}}/g) || [])].map(m => +m[1]) )); console.log(numArray);
优势说明
- 精准匹配目标格式:通过
/{{(\d+)}}/g直接定位被{{}}包裹的数字,避免处理无关字符 - 减少中间操作:用
flatMap或数组展开合并,省去多次map、filter、flat的链式调用,减少中间数组生成,性能更优 - 逻辑更清晰:直接围绕目标数字提取逻辑编写代码,可读性更强
内容的提问来源于stack exchange,提问作者Corcor
相关产品推荐
相关产品推荐

