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

发布于 2024-09-18 18:25:22 字数 181 浏览 3 评论 0原文

我有一个数字数组,例如:[1, 4, 7, 1, 2, 1, 3, 1, 4]

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

是否有任何内置的 Javascript/jQuery 函数可以做到这一点,或者我必须编写自己的函数?

I have an array of numbers, like: [1, 4, 7, 1, 2, 1, 3, 1, 4].

I would like to remove duplicate elements and sort the result, i.e. the required result is:
[1, 2, 3, 4, 7].

Is there any built in Javascript/jQuery functions to do this, or I must write my own ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花开雨落又逢春i 2024-09-25 18:25:22

不,没有任何内置的东西。另外,您需要注意默认排序是词法排序,因此 [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]

No, there's nothing built-in. Also, you need to be aware that the default sort is lexical, so [9, 1, 10].sort() will return [1, 10, 9].

The following will sort and remove duplicates from an array of numbers in place:

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]
清风不识月 2024-09-25 18:25:22

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]

来自上面链接的页面:

“下划线提供了 60 多个函数,支持常见的功能怀疑:map、select 、调用——以及更专业的帮助器:函数绑定、JavaScript 模板、深度相等测试等等。”

The Underscore library is great for all those kinds of tricks; I love it and wouldn't be able to live without it!!

Once you declare it, you call its functions by using the underscore, like this:

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

If you want it sorted:

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

From the page linked above:

"Underscore provides 60-odd functions that support both the usual functional suspects: map, select, invoke — as well as more specialized helpers: function binding, javascript templating, deep equality testing, and so on."

物价感观 2024-09-25 18:25:22
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"]
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"]
七七 2024-09-25 18:25:22

从 JavaScript 1.6 开始,array.filter() 可用于删除重复值:

[1, 4, 7, 1, 2, 1, 3, 1, 4]
    .filter(function (value, index, self) {
        return self.indexOf(value) === index;
});

returns

[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;
    });

returns

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

As of JavaScript 1.6, array.filter() can be used to remove duplicate values:

[1, 4, 7, 1, 2, 1, 3, 1, 4]
    .filter(function (value, index, self) {
        return self.indexOf(value) === index;
});

returns

[1, 4, 7, 2, 3]

What's nice about filter is it works on all value types in the array:

[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;
    });

returns

[1, 2, 3, 4, 7, "a", "b", "c", "d", "e"]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文