如何不通过循环获取去掉最后两个元素的数组子数组?代码求助
如何不通过循环获取去掉最后两个元素的数组子数组?
你想要的效果可以用JavaScript的slice()方法轻松实现,完全不需要循环,而且不会修改原数组,非常适合你的需求。
先说说你原有代码的问题
你之前写的:
let data=[]; const r=[1,2,3,4,5,6,7,8,9]; data.push(r.splice(7,1));
有两个关键问题:
splice()方法的作用是修改原数组,它会从原数组中删除指定元素,同时返回被删除的元素组成的数组。你这里splice(7,1)只会删掉索引7的元素(也就是8),返回[8],所以data最后变成了[[8]],完全不是你想要的结果。- 就算你调整
splice的参数,它也会改变原数组r,如果之后还需要用到完整的原数组,就会有麻烦。
正确实现方式:使用slice()
slice()是专门用来创建数组子副本的方法,不会修改原数组,语法也很灵活:
const r = [1,2,3,4,5,6,7,8,9]; const data = r.slice(0, -2); console.log(data); // 输出 [1,2,3,4,5,6,7] console.log(r); // 原数组保持不变:[1,2,3,4,5,6,7,8,9]
这里的slice(0, -2)表示:
- 第一个参数
0:从数组的起始位置(索引0)开始截取 - 第二个参数
-2:截取到倒数第二个元素的前一位(也就是去掉最后两个元素)
如果你一定要用splice(不推荐)
如果你因为某些原因必须用splice,可以这样写,但要注意它会修改原数组:
const r = [1,2,3,4,5,6,7,8,9]; r.splice(-2); // 删掉最后两个元素,原数组r现在变成[1,2,3,4,5,6,7] const data = [...r]; // 复制原数组到data,避免后续修改影响data
这种方法的弊端是原数组r被永久修改了,所以除非你确定不需要原数组了,否则还是优先用slice。
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

