我有一系列数字,如:[1,4,7,1,2,1,3,1,4]。
我想删除重复的元素并对结果进行排序,即所需的结果为:[1,2,3,4,7]。
是否有内置的Javascript / jQuery函数来执行此操作,或者我必须自己编写?
答案 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"]