如何用JavaScript实现运算数组的数字合并转换?
解决方案
需求二:合并连续数字数组
针对将[3,3,'+',3]转换为[33,'+',3]的需求,可通过遍历数组合并连续数字实现:
function mergeConsecutiveNumbers(arr) { const result = []; let currentNum = ''; for (const item of arr) { if (!isNaN(item)) { currentNum += item.toString(); } else { if (currentNum) { result.push(Number(currentNum)); currentNum = ''; } result.push(item); } } if (currentNum) { result.push(Number(currentNum)); } return result; } // 测试 const array1 = [3, 3, '+', 3]; const array2 = mergeConsecutiveNumbers(array1); console.log(array2); // 输出 [33, '+', 3]
需求一:拆分带运算的元素并合并数字
针对将[3,'3+3']转换为[33,'+',3]的需求,需先拆分包含运算符的字符串元素,再调用上述合并函数:
function splitAndMerge(arr) { const tempArr = []; const opRegex = /(\d+)([\+\-\*\/])(\d+)/; for (const item of arr) { if (typeof item === 'string' && opRegex.test(item)) { const [_, num1, op, num2] = item.match(opRegex); tempArr.push(Number(num1), op, Number(num2)); } else { tempArr.push(item); } } return mergeConsecutiveNumbers(tempArr); } // 测试 const inputArr = [3, '3+3']; const outputArr = splitAndMerge(inputArr); console.log(outputArr); // 输出 [33, '+', 3]
说明
mergeConsecutiveNumbers函数通过临时字符串收集连续数字,遇到运算符时将收集的数字转为数值存入结果数组,完成连续数字的合并。splitAndMerge函数先使用正则匹配拆分类似"3+3"的字符串,提取数字和运算符,再调用合并函数处理连续数字,最终得到目标格式。- 正则
/(\d+)([\+\-\*\/])(\d+)/支持加减乘除四种基础运算符,若需支持更多运算符,可扩展括号内的字符集。
内容的提问来源于stack exchange,提问作者Levente Tóth
相关产品推荐
相关产品推荐

