一道面试题的深思,实现一个 JS 原型方法

题目描述:

实现原生 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 }

谨记啊:

实践是检验真理的唯一标准!
温故而知新!

你可能感兴趣的:(一道面试题的深思,实现一个 JS 原型方法)