jQuery.unique()
州的描述:
在适当的位置对DOM元素数组进行排序,并删除重复项。请注意,这仅适用于DOM元素的数组,而不是字符串或数字。
考虑到描述,有人可以解释为什么下面的代码有效吗?
<div></div>
<div></div>
var arr = ['foo', 'bar', 'bar'];
$.each(arr, function(i, value){
$('div').eq(0).append(value + ' ');
});
$.each($.unique(arr), function(i, value){
$('div').eq(1).append(value + ' ');
});
由于
编辑:可能的解决方案:
function unique(arr) {
var i,
len = arr.length,
out = [],
obj = { };
for (i = 0; i < len; i++) {
obj[arr[i]] = 0;
}
for (i in obj) {
out.push(i);
}
return out;
};
答案 0 :(得分:89)
虽然它有效,但您应该考虑功能描述。如果创作者说它不是为了过滤除dom元素以外的任何其他数组而设计的,那么你应该听听它们 此外,这个功能很容易被复制:
function unique(array){
return array.filter(function(el, index, arr) {
return index === arr.indexOf(el);
});
}
为了使这段代码适用于所有浏览器(包括不支持某些数组功能的ie7,例如indexOf
或filter
),这里是使用jquery功能的重写:
现在,翻译的代码应如下所示:
function unique(array) {
return $.grep(array, function(el, index) {
return index === $.inArray(el, array);
});
}
答案 1 :(得分:22)
可能可以处理数组字符串等,但它并不是为那种用途设计的......
请注意,unique()
的代码隐藏在Sizzle中uniqueSort
:github source
虽然其中一些额外的代码似乎可以在任何阵列上运行,但请密切关注sortOrder
as defined here。将内容置于“文档顺序”中会做很多额外的工作 - 因此文档说明它应该仅用于DOM元素的数组。
答案 2 :(得分:8)
我知道DOM的独特作品,但是在int:
的数组上这个工作$.unique(arr.sort());
答案 3 :(得分:6)
如果不限制使用jQuery,请考虑使用Set from ES6。
var arr = ['foo', 'bar', 'bar'];
Array.from(new Set(arr)); // #=> ["foo", "bar"]
适用于Firefox 45,Safari 9和Chrome 49。
答案 4 :(得分:3)
$.unique
将删除重复的 DOM元素,而不是相同的 DOM元素。当您尝试在字符串上使用它时,您会得到不可预测的行为,并且排序将(可能)失败。
这是一个仅供jQuery内部使用的功能,对你和我这样的凡人都没用。
答案 5 :(得分:2)
有一种快速方法可以扩展jQuery.unique()函数,以处理包含任何类型元素的数组。
(function($){
var _old = $.unique;
$.unique = function(arr){
// do the default behavior only if we got an array of elements
if (!!arr[0].nodeType){
return _old.apply(this,arguments);
} else {
// reduce the array to contain no dupes via grep/inArray
return $.grep(arr,function(v,k){
return $.inArray(v,arr) === k;
});
}
};
})(jQuery);
// in use..
var arr = ['first',7,true,2,7,true,'last','last'];
$.unique(arr); // ["first", 7, true, 2, "last"]
var arr = [1,2,3,4,5,4,3,2,1];
$.unique(arr); // [1, 2, 3, 4, 5]
http://www.paulirish.com/2010/duck-punching-with-jquery/ - 示例#2
答案 6 :(得分:0)
$ .unique将仅删除重复的DOM元素,如果您需要它用于数组:
var result=[] ;
$.each([12,1,2,4,3,1,4,3,3,2,111],
function(i,e){ if($.inArray(e,result)===-1) result.push(e) ;});
result;
答案 7 :(得分:0)
var array=['a','b','c','a'];
function unique(array)
{
var unique_arr=[];
array.forEach(function(i,e)
{
if(unique_arr.indexOf(i)===-1) unique_arr.push(i);
});
return unique_arr;
}
console.log(unique(array));