js中arr.slice截取数组中的一段元素,组成一个新数组返回

str.split('/');

以正斜杠“/”为分隔符;将原字符串分割成若干子串,并以数组形式返回。
怎么记忆呢?sp就是分割;lit就是列表的意思;分割成列表转换为数组

const str = 'home/user/docs/file.txt';
const arr = str.split('/');
console.log(arr); 
// 输出: ['home', 'user', 'docs', 'file.txt']

arr.slice(开始包含,结束不包含)

从原数组中截取一段元素,组成一个新数组返回。
记忆:s是li数组ce扯,分割数组;返回一个新的数组

arr.slice() ---- 2个重要的点

1,不会改变原数组(immutable),这是它和 splice() 最本质的区别
2,浅拷贝(shallow copy):如果数组里存的是对象,拷贝的是对象的引用地址。

基本使用

const arr = ['a', 'b', 'c', 'd', 'e'];
// 从索引1开始,到索引4之前结束
const result = arr.slice(1, 4); 

// 输出:['b', 'c', 'd']
console.log(result); 

// 输出:['a', 'b', 'c', 'd', 'e'] (原数组没变)
console.log(arr);   

负数索引

const arr = ['a', 'b', 'c', 'd', 'e'];
 // 倒数第3个到倒数第1个之前
const result = arr.slice(-3, -1);
console.log(result); // 输出:['c', 'd']

只有一个参数(截取到末尾)

const arr = ['a', 'b', 'c', 'd', 'e'];
// 从索引2开始,一直截取到最后
const result = arr.slice(2); 
// 输出:['c', 'd', 'e']
console.log(result); 

arr.slice(-1)[0] 获取数组最后一个元素

记忆:s是li数组ce扯,分割数组;返回一个新的数组

arr[arr.length-1] 获取数组最后一个元素

arr.at(-1) 获取数组最后一个元素

slice 最常用的几个场景是:

1,分页数据:data.slice((page-1)size, pagesize) 截取当前页要显示的数据。
page = 1,2,3,4,
size = 10
// 第1次的时候:(0,10)
// 第2次的时候:(10,20)
// 第3次的时候:(20,30)

2,将类数组(如 arguments)转为真正的数组:Array.prototype.slice.call(arguments)。

slice是浅拷贝:数组里是数字/字符串修改值不影响

const arr = [1, 2, 3];
const copy = arr.slice();

copy[0] = 999; // 

// 输出 [1, 2, 3] —— 原数组纹丝不动 ✅
console.log(arr);   

// 输出 [999, 2, 3]
console.log(copy);  

slice是浅拷贝:数组里存的是对象(引用类型)会影响

const arr = [
  //这是一个对象(保险箱)
  { name: '小明', age: 18 },  
  { name: '小红', age: 20 }
];

const copy = arr.slice(); // 复制新数组

// 注意:我只修改了“复制出来的新数组”里的第一个对象
copy[0].age = 99; 

console.log("输出原数组:",arr[0]);   
// 输出原数组:{ name: '小明', age: 99 } 
// 原数组里的小明年龄也跟着变成 99 了!😱
posted @ 2026-08-17 13:49  南风晚来晚相识  阅读(13)  评论(0)    收藏  举报