题目描述:
实现原生 splice() 方法,其它的数组方法可以用。
背景介绍:
因为个人原因,今天没在学校,电话面试的时候我没有带电脑,只是记得自己实现过这个方法,最后描述了很多,面试官还是很难理解我的思路,就去我的简书看我文章。(http://www.jianshu.com/p/f2c548ccfca8),但是时间有点久了,我自己对逻辑也有点模糊了,也时间复杂度都没能一下子想到,有点惭愧,最后面试官点拨了我一下,用数组连接的方法,我大概说了一下我的思路,现在回到学校,完善了代码(真的比我之前的方法好很多)。
Array.prototype.ssplit = function () {
if (arguments.length === 2) {
return this.slice(0, arguments[0])
} else {
var arr1 = this.slice(0, arguments[0]);
var arr2 = this.slice(arguments[arguments[0] + arguments[1], this.length]);
var arr3 = [];
for (var i = 2; i < arguments.length; i++) {
arr3.push(arguments[i]);
}
return arr1.concat(arr2.concat(arr3))
}
};
var arr = [1, 2, 3];
console.log(arr.ssplit(1, 2, 5, 6, 7, 8)) //[ 1, 5, 6, 7, 8 ]
补充:
最后面试官问了我,arguments 的数据类型,我也不知道我在哪看到的文章,反正记忆力,就是空的时候,数据类型是 undefined,一个参数的时候是 number,其它都是 array,回来试了一下,发现真是错的离谱:
Array.prototype.ssplit = function () {
return arguments
};
var arr = [1, 2, 3];
console.log(arr.ssplit()) //{}
console.log(arr.ssplit(1)) //{ '0': 1 }
console.log(arr.ssplit(1,2,3,4,5)) //{ '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }
谨记啊:
实践是检验真理的唯一标准!
温故而知新!