0

可能重复:
Javascript数组排序和唯一

我很惊讶地发现没有内置的 jQuery 函数。

我在 stackoverflow 上看到了很多解决方案,但是这些问题被无效的答案所污染(要找到一个有效的答案,我必须全部测试)。

因此,为了将来参考并避免其他用户的麻烦,我决定发布这种问答风格。

如何使用 jQuery 返回唯一且已排序的数组值?

数字:

// input array
var inputArray = [10, 5, 15, 10, 5, 15];

// expected result array
var resultArray = [5, 10, 15];

字符串:

// input array
var inputArray = ['b', 'a', 'c', 'b', 'a', 'c'];

// expected result array
var resultArray = ['a', 'b', 'c'];
4

3 回答 3

1

我将自己在这里添加我的答案,而不是之前提出的问题,仅仅是因为之前提出的问题中的答案很糟糕,但我不希望作者改变决定。

现在,为了让您更直观地了解我提出的解决方案:排序是 O(n log n),删除重复项是 O(n),因此我们得出结论,整个操作不应该比 n log n 复杂。但是,如果您考虑一下,n 永远不会增加,但如果您先删除重复项,然后再排序,则很可能会减少。因此,虽然表面上它仍然是 O(n log n),但它通常会更快。您可能可以通过将值收集到树而不是哈希表中来改进它(在其他语言中),但鉴于 JavaScript 中“本机”数据结构和自定义数据结构之间的性能差异巨大 - 下面的解决方案应该是最佳的:

function sortUnique(array) {
    "use strict";
    var table = {}, key, i;
    for (i = 0; i < array.length; i++) {
        table[[array[i]]] = '';
    }
    i = 0;
    for (key in table) {
        array[i++] = key;
    }
    array.length = i;
    return array.sort();
}
sortUnique(['b', 'a', 'c', 'b', 'a', 'c']);
// [ 'a', 'b', 'c' ]
于 2013-01-15T11:55:27.127 回答
0

作为一个函数:

function sort_unique(arr) {
    return arr.sort(function(a,b){
        return (a > b) ? 1 : -1;
    }).filter(function(el,i,a) {
        return (i==a.indexOf(el));
    });
}
于 2013-01-15T11:33:21.483 回答
0

希望这对你有用

var dummy = [10, 5, 15, 10, 5, 15];
var arr = [];
$.map(arr, function(n, i){
  if($.inArray(n, arr) == -1)
      arr.push(n);
});

现在在 arr 值是唯一的。现在您可以对此应用任何排序算法。

于 2013-01-15T11:45:06.810 回答