JavaScript如何从最后一个null的i+1位置切片数组并处理全null场景
现有代码问题
- 存在语法错误:
let newArray: = []中多余的冒号会直接触发语法报错。 - 逻辑存在两处漏洞:
- 每次遍历到非null元素都会重新给
newArray赋值,循环运行到最后一个非null元素时,会把完整数组赋值给newArray,和你要砍掉末尾元素的需求不符。 - 数组全为null的场景下,if分支永远不会触发,
newArray会保持初始空数组,不符合预期。
- 每次遍历到非null元素都会重新给
正确实现方案
因为你的输入是固定null全前置的数组,只需要先判断数组中是否存在非null元素即可:
function sliceNullPrependedArray(array) { // 判断是否存在非null元素 const hasNonNull = array.some(item => item !== null); // 无任何非null元素直接返回原数组,存在则切掉最后一位 return hasNonNull ? array.slice(0, array.length - 1) : [...array]; }
如果需要兼容更低版本的JS环境,也可以用循环实现判断逻辑:
function sliceNullPrependedArray(array) { let hasNonNull = false; for (let i = 0; i < array.length; i++) { if (array[i] !== null) { hasNonNull = true; break; } } return hasNonNull ? array.slice(0, array.length - 1) : [...array]; }
效果验证
用你给出的测试用例运行:
console.log(sliceNullPrependedArray([null, null, 'a', 'b', 'c'])); // [null, null, 'a', 'b'] console.log(sliceNullPrependedArray([null, 'a', 'b', 'c'])); // [null, 'a', 'b'] console.log(sliceNullPrependedArray([null, null])); // [null, null]
完全符合预期输出。
内容的提问来源于stack exchange,提问作者WonderDev
相关产品推荐
相关产品推荐

