如何提取对象非空值经正则处理后填充同对象的空字段
代码实现方案(JavaScript版本)
- 先明确六根弦对应的属性键为
['e','B','G','D','A','E'],避免误处理part、endMsg等非弦属性 - 从上述键中筛选出值非空的项,取第一个作为模板字符串
- 用题目指定的正则处理模板,得到仅保留
|、其余匹配字符替换为-的填充串 - 遍历所有弦属性,将空值的属性统一替换为填充串
function fillEmptyGuitarStrings(tabObj) { // 定义六根弦对应的属性键 const stringKeys = ['e', 'B', 'G', 'D', 'A', 'E']; // 筛选非空的弦属性值,取第一个作为模板 const template = stringKeys.map(key => tabObj[key]).filter(val => val.trim())[0]; if (!template) return tabObj; // 无有效模板直接返回原对象 // 用指定正则生成填充字符串 const fillStr = template.replace(/[0-9-. a-zA-Z/\\~()<>]/g, '-'); // 填充所有空的弦属性 stringKeys.forEach(key => { if (!tabObj[key].trim()) { tabObj[key] = fillStr; } }) return tabObj; } // 测试用例 const input = { "part": "Intro", "e": "------5/6------8\\6-|-------------------|-------------------", "B": "-----------9-------|---------6p8---(6)-|-------------------", "G": "--8----------------|---8h9-------------|--<8>--------------", "D": "", "A": "", "E": "", "endMsg": "Continue..." }; const output = fillEmptyGuitarStrings(input); console.log(output);
运行上述代码后输出的对象和题目给出的预期效果完全一致,正则处理时会自动保留竖线
|,其余匹配的数字、字母、符号等都会替换为横杠-,同时不会修改非弦属性的原有值。
内容的提问来源于stack exchange,提问作者Zeddrix Fabian
相关产品推荐
相关产品推荐

