JavaScript-实现数组方法-截取数组 slice
·
slice
选取数组一部分返回新的数组 改变原数组
//slice 选取数组一部分 返回新的数组 不改变原数组
let fruits1 = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
console.log(fruits1.slice()); //['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
console.log(fruits1.slice(1, 3)); //['Orange', 'Lemon']
console.log(fruits1.slice(-2, -1)); //['Apple']
console.log(fruits1.slice(-3)); //['Lemon', 'Apple', 'Mango']
实现
- 没有参数也就是(
arguments.length === 0)返回原数组 - 变量
start和end表示要截取的元素的起始位置和终点位置a表示要返回的新数组 - 这里的判断都用
if因为参数是否存在判断完还会继续判断传入的参数 - 第一个参数处理负索引 就转换为正数的索引 是截取的起点位置
- 如果传入了第二个参数 判断第二个参数的正负 进行处理 如果没传入第二个参数 截取终点就是到数组最后
注意这里传入第二个参数的判断是
undefined如果直接用aeguments[1]来判断 0 也返回false 此时的截取终点会变成数组最后
- 然后循环将截取范围的元素
push到新数组 - 最后返回新数组
//不包含最后一个索引
Array.prototype.mySlice = function () {
//如果没有参数返回原数组
if (arguments.length === 0) {
return this
}
let a = []
let start = 0, end = 0
if (arguments[0] < 0) {
start = this.length + arguments[0]
} else {
start = arguments[0]
}
if (arguments[1] !== undefined) {
if (arguments[1] < 0) {
end = this.length + arguments[1]
}
else {
end = arguments[1]
}
} else {
end = this.length
}
for (let i = start; i < end; i++) {
a.myPush(this[i])
}
return a
}
- 以下是测试用例
console.log(fruits1.mySlice(1, 3)); // ['Orange', 'Lemon']
console.log(fruits1.mySlice(-2, -1)); //['Apple']
console.log(fruits1.mySlice(-3));//['Lemon', 'Apple', 'Mango']
更多推荐



所有评论(0)