jQuery.unique在字符串数组上

1mrurvl1  于 2022-11-03  发布在  jQuery
关注(0)|答案(9)|浏览(109)

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;
};
0x6upsns

0x6upsns1#

虽然它可以工作,但您可能应该考虑函数描述。如果创建者说它不是为过滤dom元素以外的任何东西的数组而设计的,您可能应该听听他们的意见。
此外,此功能非常容易复制:

function unique(array){
    return array.filter(function(el, index, arr) {
        return index === arr.indexOf(el);
    });
}

demo page)(英文)

更新:

为了让这段代码能在所有浏览器中工作(包括不支持某些数组特性的ie7--比如indexOffilter),这里使用jquery功能进行了重写:

下面是 * 转换后的 * 代码:

function unique(array) {
    return $.grep(array, function(el, index) {
        return index === $.inArray(el, array);
    });
}

demo page

c9qzyr3d

c9qzyr3d2#

可能适用于数组字符串等,但它并不是为这种用途而设计的...
请注意,unique()的代码在Sizzle中隐藏为uniqueSort:github源
虽然有些额外的代码看起来似乎可以在任何数组上使用,但请密切注意这里定义的sortOrder。它需要做很多额外的工作来将内容按“文档顺序”放置--因此文档中声明它只应在DOM元素数组上使用。

zbdgwd5y

zbdgwd5y3#

我知道unique可以和DOM一起工作,但是它可以和int数组一起工作:

$.unique(arr.sort());
zpqajqem

zpqajqem4#

有一种快速的方法可以扩展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

相关问题