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

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

        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]取第一位即为删除的项数。

猜你喜欢

转载自blog.csdn.net/qq_37800886/article/details/81182467
今日推荐