You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不通过循环获取去掉最后两个元素的数组子数组?代码求助

如何不通过循环获取去掉最后两个元素的数组子数组?

你想要的效果可以用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:56