我很惊讶地发现没有内置的jQuery函数。
我在stackoverflow上看到了很多解决方案,但是这些问题被无法解决的问题所污染(为了找到一个我必须测试它们的工作问题)。
因此,为了将来的参考和其他用户的麻烦,我决定发布这种Q& A风格。
// 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'];
答案 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值是唯一的。现在你可以对此进行任何排序算法。