Удаление дубликатов из оператора FOR в Javascript? - PullRequest
0 голосов
/ 13 января 2012

У меня есть следующее

var ahrefLength = $('a').length;
for (var i = 0; i < ahrefLength; i++) {
    var ahrefUrl = $('a')[i].attr('href');
    if(ahrefUrl != '') {
       $('a')[i].text('Unique');
    }
}

Как я могу это исправить, чтобы дубликаты "href" не появлялись? На данный момент, если 2 href одинаковы, это исправляет оба? то есть мне нужно убедиться, что нет дубликатов

Ответы [ 4 ]

1 голос
/ 13 января 2012
var list = {};
$('a[href]').text(function(i,text) {
    var href = $(this).attr('href');
    if( !(href in list) )
        return list[href] = 'Unique';
    else
        ; // what do you want to do with the duplicate?
});

Чтобы использовать оператор for:

var list = {};
var a_els = $('a[href]');  // Cache the DOM selection
var len = a_els.length;

for(var i = 0; i < len; i++) {
    var a_i = a_els.eq(i);
    var href = a_i.attr('href');
    if( !(href in list) )
        a_i.text(list[href] = 'Unique');
    else
        ; // what do you want to do with the duplicate?
}
0 голосов
/ 13 января 2012

Использовать jQuery slice:)

Демо-версия: http://jsfiddle.net/mhNra/

Удалить все дубликаты, начиная с конца

$( "a" ).each( function() {     
     $( "a[href=" + $( this ).attr( "href" ) + "]" ).slice( 0, -1 ).remove()
 });

Удалить все дубликаты, начиная с первого якоря

 $( "a" ).each( function() {     
     var arr = $( "a[href=" + $( this ).attr( "href" ) + "]" );
     arr.slice( 1, arr.length  ).remove()
 });
0 голосов
/ 13 января 2012
var hrefIdx = {};
var href = null;
$('a').each(function(i, e) {
  href = $(this).attr('href');
  if ( href != '' && !hrefIdx[href]) {
    $(this).text('Unique');
    hrefIdx[href] = true;
  }
});
0 голосов
/ 13 января 2012

Вы можете использовать ассоциативный массив (то есть объект) как своего рода «набор» для отслеживания того, какие URL вы уже видели:

var ahrefLength = $('a').length;
var hrefsToSkip = { '': true };
for (var i = 0; i < ahrefLength; i++) {
    var ahrefUrl = $('a')[i].attr('href');
    if(! hrefsToSkip[ahrefUrl]) {
       $('a')[i].text('Unique');
       hrefsToSkip[ahrefUrl] = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...