欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

程序员文章站 2022-06-11 14:35:52
...

自己写的方法,不太想修改原数组(可能是昨天做数组在线测试题一直不让修改原数组留下的阴影....)

        Array.prototype.deleteItem = function(){
            var arr1 = new Array();
            for(var i = 0 ; i < this.length ; i++){
                for(var j = i+1 ; j <= (this.length - i) ; j++){
                    if (this[i] ==this[j]) {
                        arr1.push(this[i]);
                    }
                }
            }
            return arr1;
        };
        [1,2,3,4,5,5,5,3,1,6].deleteItem();

这是牛客的标准答案:

Array.prototype.distinct = function() {
    var ret = [];
    for (var i = 0; i < this.length; i++)
    {
        for (var j = i+1; j < this.length;) {   
            if (this[i] === this[j]) {
                ret.push(this.splice(j, 1)[0]);
            } else {
                j++;
            }
        }
     }
     return ret;
}
//for test
alert(['a','b','c','d','b','a','e'].distinct());

大致的思路都差不多,不同的是答案使用的是splice方法,splice是array中最强大的方法,可以进行插入删除替换的功能(高级js教程P95),代码中splice(j,1)[0],表示在第j位,删除一个项,splice返回被删除的项组成的数组,当前数组中只删除了一个,只有一项,所以是[0]取第一位即为删除的项数。