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

时间:2013-01-15 11:33:21

标签: jquery arrays sorting unique

  

可能重复:
  Javascript array sort and unique

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

我在stackoverflow上看到了很多解决方案,但是这些问题被无法解决的问题所污染(为了找到一个我必须测试它们的工作问题)。

因此,为了将来的参考和其他用户的麻烦,我决定发布这种Q& A风格。

如何使用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'];

3 个答案:

答案 0 :(得分:1)

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

现在,为了让你更直观地了解我提出的解决方案:排序是O(n log n),删除重复项是O(n),因此我们得出结论,整个操作应该不比n log更复杂ñ。但是,如果您想到它,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' ]

答案 1 :(得分: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));
    });
}

答案 2 :(得分: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值是唯一的。现在你可以对此进行任何排序算法。