删除数字数组中相似的元素

7
我有一个数字数组,例如:[1, 4, 7, 1, 2, 1, 3, 1, 4]
我想要删除重复元素并排序结果,即所需结果为:
[1, 2, 3, 4, 7]
是否有内置的Javascript/jQuery函数可以实现这一点,还是我必须编写自己的代码?
4个回答

8

没有内置的功能。此外,您需要注意默认排序是词汇排序,因此[9, 1, 10].sort()将返回[1, 10, 9]

以下内容将对数字数组进行排序并去重:

function sortAndRemoveDuplicates(arr) {
    arr.sort( function(a, b) { return a - b; } );
    var copy = arr.slice(0);
    arr.length = 0;

    for (var i = 0, len = copy.length; i < len; ++i) {
        if (i == 0 || copy[i] != copy[i - 1]) {
            arr.push(copy[i]);
        }
    }
    return arr;
}

var arr = [1, 4, 7, 1, 2, 1, 3, 10, 1, 4, 10];
sortAndRemoveDuplicates(arr);
console.log(arr); // [1, 2, 3, 4, 7, 10]

4

Underscore库 对于所有这些技巧非常棒; 我喜欢它,没有它我就无法生存!!

一旦您声明了它,您可以使用下划线调用其函数,如下所示:

_.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]);
=> [1, 4, 7, 2, 3]

如果您想对其进行排序:

_.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]).sort();
=> [1, 2, 3, 4, 7]

从上面链接的页面中:

"Underscore提供了60多个函数,支持通常的函数式操作:map、select、invoke等,以及更专业的辅助工具:函数绑定、JavaScript模板、深度相等性测试等等。"


+1 for Underscore -- 但是如果OP正在寻找一个能够像uniq一样完成任务的JavaScript函数,为什么不提取出来解决他的问题,然后指出所有这些内容都可以在库中找到呢? :-) - Sean Vieira
2
好的... _.uniq 使用 _.reduce,而 _.reduce 又使用了 _.each... 这不是很明确... - Bambax

1
从JavaScript 1.6开始,可以使用array.filter()来删除重复的值:
[1, 4, 7, 1, 2, 1, 3, 1, 4]
    .filter(function (value, index, self) {
        return self.indexOf(value) === index;
});

返回
[1, 4, 7, 2, 3]

“过滤器的好处在于它适用于数组中的所有值类型:”
[1, "d", 4, "e", 7, "e", 1, "a", 2, "d", 1, "b", 3, "c", 1, "e", 4]
    .filter(function (value, index, self) {
        return self.indexOf(value) === index;
    });

返回
[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"]

1
Array.prototype.unique = function(){
    for(var i = 0; i < this.length; i++){
        if( this.indexOf(this[i], i+1) != -1 ){
            this.splice(i,1);
            i--;
        }
    }
    return this.sort();
}

var x = [1,'x', 4, 7, 1, 2, 1,'x', 3, 1, 4];
x.unique() // [1, 2, 3, 4, 7, "x"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接