JavaScript学习-slice()方法

264 阅读2分钟

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

前面文章学习了操作数组的一些方法(forEach()/map()/reduce()等)也是高阶函数 相关更文 JavaScript 并不完美但是不影响其运行的一些神奇"bug"直达列表

在项目开发中对于请求后端的数据多为数组, 经常需要对这个大数组进行处理, 本篇继续学习 JavaScript 数组的一些相关方法 Array.prototype.slice()

JavaScript -slice()

Array.prototype.slice() 这个方法返回一个新的数组对象,这一对象是一个由 beginend 决定的原数组的浅拷贝(包括 begin,不包括 end)。

slice() 语法

arr.slice([begin[, end]])

返回值: 一个含有被提取元素的 数组。故不会改变原数据.

小例子:

const dataList = ['小阿天', 'pear', 'apple', 'string3', 'str4']

dataList.slice(0, -1) // 获取除最后一个元素以外的所有元素

console.log(dataList.slice(2))
// output-> Array ["apple", "string3", "str4"]

console.log(dataList.slice(2, 4))
// output-> Array ["apple", "string3"]

console.log(dataList.slice(1, 5))
// output-> Array ["pear", "apple", "string3", "str4"]

console.log(dataList.slice(-2))
// output-> Array ["string3", "str4"]

console.log(dataList.slice(2, -1))
// output-> Array ["apple", "string3"]

使用 slice() 方法, 原始数组不会被改变。 要注意与 splice()方法的区别, 别记混淆了.

slice() 方法的应用

slice()方法的使用还是挺多的

  1. 使用 slice()方法将一个伪数组或集合转换为一个新数组: 通过将slice()方法绑定到这个对象上.

如下将一个函数的参数 arguments 这个类数组对象进行转换:

fucntion changeArgumentsToArray(){
  return Array.prototype.slice.call(arguments)
}
let argLists = changeArgumentToArray(1, 3, 5, 7, 9)  // [1, 3, 5, 7, 9]

使用 Array.prototype.slice.call(arguments) 来书写还是有点太长了, 可以使用简洁的书写方法: [].slice.call(arguments)来代替

// 先来简写方法:
let unboundSlice = Array.prototype.slice
let slice = Function.prototype.call.bind(unboundSlice)

// 使用 `slice`来封装函数
function changeArgumentsToArray() {
  return slice(arguments)
}

let argLists = changeArgumentToArray(1, 3, 5, 7, 9)  // [1, 3, 5, 7, 9]

注意上面的将类数组转化为数组的方案是ES5的方法, 在 ES6 给我们提供了更加方便的方法API: Array.from()

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES5的 slice 方法
let arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// 使用 ES6的方法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
  1. 数据处理: 在开发中经常用来对请求的数据进行处理操作.