HOME > > > > >

jQuery.unique(arr)

引数

array
重複を削除したいarray

戻り値

Array
arrayから重複をなくしたの新しいArray

DOM 要素を持つ配列から重複しているDOM要素を削除する。

サンプル

実行結果

There are 6 divs in this document.
no class
class dup
class dup
class dup
no class

フェーズ1

フェーズ2

フェーズ3

Javascript

  1. var i = 0;
  2.  
  3. // divの配列を取得
  4. var divs = $('#jqTest div').get();
  5.  
  6. // 中身確認 フェーズ1に出力
  7. var str = 'count : ' + divs.length + "<br />";
  8. for (i=0; i<divs.length; i++) {
  9.     str += divs[i].innerText + '<br />';
  10. }
  11. $('.phase1').append(str);
  12.  
  13. /**
  14.  * ここで.dupを持つのDOM配列を新たにdivsに結合
  15.  * divs[2]、divs[3]、divs[4]と
  16.  * $('.dup').get()[0]、$('.dup').get()[1]、$('.dup').get()[2]は同じもの
  17.  */
  18. divs = divs.concat($('#jqTest .dup').get());
  19.  
  20.  
  21. // 中身確認 フェーズ2に出力
  22. i = 0;
  23. var str = 'count : ' + divs.length + "<br />";
  24. for (i=0; i<divs.length; i++) {
  25.     str += divs[i].innerText + '<br />';
  26. }
  27. $('.phase2').append(str);
  28.  
  29. // unique実行
  30. divs_new = jQuery.unique(divs);
  31.  
  32. // 新たに作成されたdivs_newをフェーズ3に出力
  33. // .dupをもつDOMは重複コンテンツとみなされ削除される。
  34. // 結果フェーズ1と同じ結果になる。
  35.  
  36. i = 0;
  37. var str = 'count : ' + divs_new.length + "<br />";
  38. for (i=0; i<divs_new.length; i++) {
  39.     str += divs_new[i].innerText + '<br />';
  40. }
  41.  
  42. $('.phase3').append(str);

HTML

  1. <div id="jqTest">
  2.     <div>There are 6 divs in this document.</div>
  3.     <div>no class</div>
  4.     <div class="dup">class dup</div>
  5.     <div class="dup">class dup</div>
  6.     <div class="dup">class dup</div>
  7.     <div>no class</div>
  8. </div>
  9.  
  10. <hr />
  11.  
  12. <div class="phase1">
  13. <h5>フェーズ1</h5>
  14. </div>
  15.  
  16. <hr />
  17.  
  18. <div class="phase2">
  19. <h5>フェーズ2</h5>
  20. </div>
  21.  
  22. <hr />
  23.  
  24. <div class="phase3">
  25. <h5>フェーズ3</h5>
  26. </div>
  27.  

通常のArrayオブジェクトでは利用できない。あくまでDOM要素の配列が対象。

サンプル

実行結果

Javascript

  1. var arr1 = ['javascript', 'php', 'photoshop', 'jQuery', 'SQL'];
  2. var arr2 = ['javascript', 'php', 'javascript', 'javascript', 'SQL'];
  3.  
  4. var union        = arr1.concat(arr2);
  5. var union_length = union.length;
  6. var new_arr      = jQuery.unique(union);
  7.  
  8. $('.execute2').click(function(){
  9.     $(this).parent().html('[new_arr.length]' + new_arr.length + '<br />' +
  10.                           '[union.length]  ' + union_length   + '<br />' +
  11.                           new_arr.join('&'));
  12. });

HTML

  1. <div class="jqTest2">
  2.     <input type="button" value="execute2" class="execute2" />
  3. </div>

と思ったら重複がなくなってるな・・・