如何将数组转为字符串并实现加一?当前代码返回undefined求助
问题分析与解决
你的代码存在三个核心问题:
digits.toString()会把数组转为"1,2,3",而replace(",","")仅替换第一个逗号,最终得到"12,3",并非你想要的"123"- 直接对字符串执行
+1是字符串拼接操作,会得到"12,31"这类错误结果,而非数值加法后的124 - 函数没有
return语句,调用plusOne([1,2,3])时自然返回undefined
修正后的代码(返回数值结果)
var plusOne = function(digits) { // 用join('')直接将数组元素拼接为无逗号字符串 const numStr = digits.join(''); // 转成数值后执行加法 const result = Number(numStr) + 1; console.log(result); // 函数返回结果,避免undefined return result; }; plusOne([1,2,3]); // 输出124,返回124
若需返回字符串形式的"124"
var plusOne = function(digits) { const numStr = digits.join(''); const result = (Number(numStr) + 1).toString(); console.log(result); return result; }; plusOne([1,2,3]); // 输出"124",返回"124"
额外补充(处理大数溢出场景)
如果你的需求是类似LeetCode「加一」问题(返回数字数组,比如输入[9,9]返回[1,0,0]),直接转数值会有溢出风险,此时用数组操作更稳妥:
var plusOne = function(digits) { for (let i = digits.length - 1; i >= 0; i--) { digits[i]++; if (digits[i] < 10) { return digits; } digits[i] = 0; } // 所有位都是9的情况,在数组头部加1 digits.unshift(1); return digits; }; plusOne([1,2,3]); // 返回[1,2,4] plusOne([9,9]); // 返回[1,0,0]
内容的提问来源于stack exchange,提问作者tukitooo1998
相关产品推荐
相关产品推荐

