jQuery.unique()
的说明指出:
对DOM元素数组进行排序,删除重复的元素。注意,这只适用于DOM元素数组,不适用于字符串或数字。
记住了描述,有人能解释一下为什么下面的代码能工作吗?
第一个
http://jsfiddle.net/essX2/
谢谢
编辑:可能的解决方案:
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;
};
9条答案
按热度按时间0x6upsns1#
虽然它可以工作,但您可能应该考虑函数描述。如果创建者说它不是为过滤dom元素以外的任何东西的数组而设计的,您可能应该听听他们的意见。
此外,此功能非常容易复制:
(demo page)(英文)
更新:
为了让这段代码能在所有浏览器中工作(包括不支持某些数组特性的ie7--比如
indexOf
或filter
),这里使用jquery功能进行了重写:$.grep
而不是Array.filter
$.inArray
而不是Array.indexOf
下面是 * 转换后的 * 代码:
(demo page)
c9qzyr3d2#
它可能适用于数组字符串等,但它并不是为这种用途而设计的...
请注意,
unique()
的代码在Sizzle中隐藏为uniqueSort
:github源虽然有些额外的代码看起来似乎可以在任何数组上使用,但请密切注意这里定义的
sortOrder
。它需要做很多额外的工作来将内容按“文档顺序”放置--因此文档中声明它只应在DOM元素数组上使用。zbdgwd5y3#
我知道unique可以和DOM一起工作,但是它可以和int数组一起工作:
zpqajqem4#
有一种快速的方法可以扩展jQuery.unique()函数,使其可以处理包含任何类型元素的数组。
http://www.paulirish.com/2010/duck-punching-with-jquery/-示例2