javascript中是否有unique()函数来删除数字数组中的类似元素?

时间:2010-09-10 14:15:49

标签: javascript jquery arrays unique

我有一系列数字,如:[1,4,7,1,2,1,3,1,4]。

我想删除重复的元素并对结果进行排序,即所需的结果为:[1,2,3,4,7]。

是否有内置的Javascript / jQuery函数来执行此操作,或者我必须自己编写?

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:4)

Underscore library对所有这些诡计都很有用;我喜欢它,没有它就无法生存!!

声明后,您可以使用下划线调用其函数,如下所示:

_.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模板,深度相等测试等。”< / em>的

答案 2 :(得分: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"]

答案 3 :(得分: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"]