的描述jQuery.unique() http://api.jquery.com/jQuery.unique/状态:
对 DOM 元素数组进行就地排序,并删除重复项。请注意,这仅适用于 DOM 元素数组,不适用于strings或数字。
考虑到描述,有人可以解释为什么下面的代码有效吗?
<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 + ' ');
});
http://jsfiddle.net/essX2/ http://jsfiddle.net/essX2/
Thanks
编辑:可能的解决方案:
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;
};
尽管它有效,但您可能应该考虑功能描述。如果创建者说它不是为过滤 dom 元素以外的任何数组而设计的,那么您可能应该听听他们的意见。
此外,这个功能很容易复制:
function unique(array){
return array.filter(function(el, index, arr) {
return index === arr.indexOf(el);
});
}
(演示页面 http://jsfiddle.net/essX2/4/)
Update:
为了使此代码能够在所有浏览器中工作(包括不支持某些数组功能的 ie7 - 例如indexOf
or filter
),这是使用 jquery 功能的重写:
- use $.grep http://api.jquery.com/jQuery.grep/代替
Array.filter
- use $.inArray http://api.jquery.com/jQuery.inArray/代替
Array.indexOf
现在介绍一下如何翻译的代码应如下所示:
function unique(array) {
return $.grep(array, function(el, index) {
return index === $.inArray(el, array);
});
}
(演示页面 http://jsfiddle.net/essX2/5/)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)