JavaScript中slice方法有什么替代方案?计算器数组运算场景适用
问题修复方案
问题根源
- 左侧查找循环终止条件为
j > 0,遗漏索引为0的数字 - 右侧边界判断逻辑错误,当数字在数组末尾时,结束索引设置不对导致slice无法取到最后一位
- 两次直接给newArray赋值,覆盖了左侧提取的数字,没有做合并
修复后的代码
var array = ['7', '3', '+', '6', 'x', '8', '+', '5', '4', 'x', '2']; // 遍历查找乘号 for (var i = 0; i < array.length; i++) { if (array[i] == 'x') { var newArray = []; let j; // 向左查找最近的非数字位置 for (j = i - 1; j >= 0; --j) { if (isNaN(array[j])) { break; } } // 向右查找最近的非数字位置 let e; for (e = i + 1; e < array.length; e++) { if (isNaN(array[e])) { break; } } // 处理右侧是数组末尾的情况 if (e == array.length - 1 && !isNaN(array[e])) { e = array.length; } // 合并左右两侧的数字 const leftNum = array.slice(j + 1, i); const rightNum = array.slice(i + 1, e); newArray = newArray.concat(leftNum, rightNum); console.log('乘号位置:', i); console.log('左侧数字:', leftNum); console.log('右侧数字:', rightNum); console.log('合并结果:', newArray); } }
运行效果说明
以你提供的测试数组为例,运行后会输出:
- 第一个乘号(索引4):左侧提取到
['6'],右侧提取到['8'] - 第二个乘号(索引9):左侧提取到
['5','4'],右侧提取到['2']
所有单数字、多数字场景都可以正常提取。
内容的提问来源于stack exchange,提问作者Juan21Guns
相关产品推荐
相关产品推荐

