如何使用$ .unique()函数

时间:2011-09-09 18:44:34

标签: jquery

请帮助我理解如何使用$.unique()功能。

来自文档:

  

在适当的位置对DOM元素数组进行排序,删除重复项。

我正在尝试这段代码:

<h1 class="foo">Headline</h1>
<h1 class="foo">Headline</h1>
<h1 class="foo">Headline</h1>

alert( $.unique($('.foo')).length );

它返回3,但我认为1.我错过了什么?看到使用此功能的一些实践示例会很棒。感谢。

P.S。

我也尝试过几个数字,但得到了一个非常好奇的结果。 以下代码在不同的浏览器中返回不同的值!

$.unique([ 1, 2, 2, 3, 3, 1 ])

  • Safari - 1,2,3,1
  • 歌剧 - 2,1,3
  • FF - 3,2,1,3
  • Chrome - 3,2,1
  • IE - 2,1,3

5 个答案:

答案 0 :(得分:7)

$.unique仅适用于DOM元素数组。不是其他事物的阵列。

在您的情况下,您有3 <h3>秒。它们不是相同的DOM元素,因此$.unique不会删除它们。

<h1 class="foo">Headline</h1>
<h1 class="foo">Headline</h1>
<h1 class="foo">Headline</h1>

alert($.unique($('.foo')).length);  // 3

$.unique适用于可能多次包含相同元素的数组。

<h1 class="foo otherFoo">Headline</h1>
<h1 class="foo">Headline</h1>

var $foo = $('.foo').get();
var $otherFoo = $('.otherFoo').get();

var $e = $foo.concat($otherFoo);
alert($e.length); // 3
alert($.unique($e).length); // 2

另一方面,如果你想让$.unique排序其他东西,而不仅仅是DOMElements,你可以做这样的事情(取自here):

(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);

答案 1 :(得分:4)

$.unique适用于DOMElements数组,而不是数字,字符串或甚至是jQuery对象。

它由add()中的jQuery内部使用,以防止将重复项添加到同一个jQuery对象中。这是一个例子:

HTML:

<h1 class="foo">Headline</h1>
<h1 class="foo bar">Headline</h1>
<h1 class="bar">Headline</h1>

使用Javascript:

var foo = $('.foo').get(); // Array of size 2
var bar = $('.bar').get(); // Array of size 2
var myArr = [];
for(var i = 0; i < foo.length; i++)
    myArr.push(foo[i]);
for(i = 0; i < bar.length; i++)
    myArr.push(bar[i]);

alert(myArr.length); // Outputs 4
alert($.unique(myArr).length); // Outputs 3

如果您使用的是jQuery,那么您应该很少有一个普通的DOME元素Javascript数组。它在jQuery源代码内部最有用。

PS。如果你想从数字/字符串数组中删除重复的条目,我建议在这个问题中使用js158的jQuery解决方案:jQuery function to get all unique elements from an array?

答案 2 :(得分:0)

来自docs page

的引用
请注意,这仅适用于DOM元素的数组,而不适用于字符串或数字。


所以这就是数字不同的原因。

该函数只删除重复的DOM元素,而不是它们的innerHTML值,以防你想知道的是什么,有例子如何在documentation page上使用它

答案 3 :(得分:0)

来自here

  

请注意,这仅适用于DOM元素的数组,而不适用于字符串或数字。

它也提供了一个例子。

答案 4 :(得分:-3)

$.unique(array)

unique is an inbuilt jQuery function to return unique values from an Jaascript array.