JS中使用slice()从数组末尾取元素时传0返回值异常问题
问题原因分析
- 当你传入
n=0时,第一行n = -n执行后n的值为0 - JS中0属于假值,
!0的判断结果为true,因此condition会被赋值为-1 - 数组的
slice(-1)逻辑就是取最后一个元素,因此返回[3]而非预期的空数组 - 你之前设置默认值失败的核心原因是逻辑顺序错误:先对n取反再做判断,把默认值处理、非法值处理的逻辑混在了一起,语义不清晰
修复后的实现
直接按照takeRight的语义(从数组右侧取n个元素)调整逻辑即可:
const takeRight = (array, n = 1) => { // 取0个或者负数个直接返回空数组 if (n <= 0) return [] // slice本身支持负数偏移,偏移绝对值超过数组长度时自动返回整个数组,刚好匹配你的测试要求 return array.slice(-n) }
测试验证
所有用例均符合预期:
takeRight([1, 2, 3])→ 返回[3]takeRight([1, 2, 3], 2)→ 返回[2, 3]takeRight([1, 2, 3], 5)→ 返回[1, 2, 3]takeRight([1, 2, 3], 0)→ 返回[]
内容的提问来源于stack exchange,提问作者RoRo
相关产品推荐
相关产品推荐

