JavaScript正负数组分离功能异常,请求排查代码错误
数组排序问题:正数在前负数在后且保留原顺序的代码错误排查
需求说明:输入数组如
{-5, -4, 10, 12, 13, 4, 5, -8, -6},需输出{10, 12, 13, 4, 5, -5, -4, -8, -6}(正数在前、负数在后且各自保留原顺序)。当前编写的JavaScript代码无法得到预期输出,请求帮忙排查错误。
用户提供的原始代码如下:
JavaScript 代码
function foo() { var arrch = document.getElementById("text").value.spilt(" ").map(Number); var dlina = arrch.length; var new_arr = []; var new_arr2 = []; var k = 0; var summa = 0; var n = 0; for (var i = 0; i < dlina; i++) { if (arrch[i] > 0) { summa += arrch[i]; new_arr[n] = arrch[i]; n++; } else if (arrch[i] < 0) { new_arr2[k] = arrch[i]; k++; } } new_arr = new_arr.join(" "); new_arr2 = new_arr2.join(" "); document.getElementById("text2").innerHTML = new_arr + " " + new_arr2; document.getElementById("text3").innerHTML = summa; }
HTML 代码
<H3>RK1</H3> <form> <p>Enter Array</p> <input type="text" id="text" placeholder="Enter Text"><br> <p>Changed array</p> <p id="text2"></p> <p>plus Array</p> <p id="text3"></p> <button onclick="foo()">Give Answer</button> </form>
错误排查及修复方案
1. 核心拼写错误:spilt 应为 split
JavaScript 中字符串分割的正确方法是split(),你写成了spilt(),这会直接导致无法分割输入字符串,后续数组处理全部失效。
2. 输入格式不兼容
当前代码仅按空格分割输入,但示例输入是用「逗号+空格」分隔的格式。如果用户按示例输入,会导致每个元素带逗号,转换为数字后出现NaN,需要兼容多种分隔符。
3. 数组合并的空格冗余
当正数数组或负数数组为空时,直接拼接会多出一个空格(比如无正数时结果会以空格开头),需要优化合并逻辑。
4. 忽略0的处理逻辑
当前代码既不把0放入正数数组也不放入负数数组,会导致输入中的0丢失,可根据需求补充0的归属逻辑。
修复后的完整代码
JavaScript 部分
function foo() { // 兼容逗号、空格分隔的输入,同时过滤空字符串 var input = document.getElementById("text").value; var arrch = input.split(/[, ]+/).filter(item => item.trim() !== "").map(Number); var positiveArr = []; var negativeArr = []; var positiveSum = 0; for (var i = 0; i < arrch.length; i++) { if (!isNaN(arrch[i])) { // 过滤无效的非数字输入 if (arrch[i] > 0) { positiveSum += arrch[i]; positiveArr.push(arrch[i]); // 用push替代手动维护索引,更简洁不易错 } else if (arrch[i] < 0) { negativeArr.push(arrch[i]); } // 若需要将0归为正数,可添加:else { positiveArr.push(arrch[i]); } } } // 合并数组并避免冗余空格 var resultArr = positiveArr.concat(negativeArr); document.getElementById("text2").innerHTML = resultArr.join(", "); document.getElementById("text3").innerHTML = positiveSum; }
HTML 部分
<H3>RK1</H3> <form> <p>Enter Array</p> <input type="text" id="text" placeholder="例如:-5, -4, 10, 12"><br> <p>Changed array</p> <p id="text2"></p> <p>正数之和</p> <p id="text3"></p> <button type="button" onclick="foo()">Give Answer</button> </form>
额外优化说明
- 用
push()方法向数组添加元素,替代手动维护索引的方式,减少出错概率 - 支持「逗号+空格」「纯空格」等多种输入分隔格式,兼容示例输入
- 过滤空字符串和无效数字,避免
NaN干扰结果 - 给按钮添加
type="button",防止点击时触发表单默认提交行为导致页面刷新
内容的提问来源于stack exchange,提问作者Ivan Snow
相关产品推荐
相关产品推荐

