2010-09-20 2 views
0

У меня есть следующие динамически генерируемые массивы:Удалить дубликат строки из массива

,<div id="layer0" style="left: 470px; top: 286px;">Some Text</div> 
,<div id="layer0" style="font-size: 68px; left: 70px; top: 286px; ">SomeText</div> 
,<div id="layer1" style="font-size: 18px; left: 60px; top: 286px; ">SomeText</div> 
,<div id="layer2" style="font-size: 18px; left: 50px; top: 286px; ">SomeText</div> 

Первые 2 записи не являются дубликатами точно, но имеют один и тот же «ID»: layer0. Второй вариант отличается тем, что имеет привилегию размера шрифта css.

Как удалить первый из этого массива, который имеет дубликат «id», но может отличаться в точном виде.

Массивы объединены корыто:

var allcode = $.merge([oldarray],[newarray]) 

Где в oldarray некоторые дублируют мне нужно избавиться. Спасибо.

ответ

1

Я думаю, что вы будете впереди, чтобы более тщательно объединить массивы, а не размять их вместе и очистить позже.

function matchId(htmlstring){ 
    var match = htmlstring.match(new RegExp(/id=\"([^\"]+)\"/i)); 
    if (match && match[1]) { 
     return match[1]; 
    } 
    return ''; 
} 

for (var j=0; j < oldarray.length; j++) { 

    var exists = false; 

    for (var k=0; k < newarray.length; k++) { 

     var newId = matchId(newarray[k]); 
     var oldId = matchId(oldarray[j]); 

     if (newId == oldId) { 
      // element already exists. 
      exists=true; 
      break; 
     } 
    } 

    if (!exists) { 
     newarray.push(oldarray[j]); 
    } 
} 
+0

Я согласен с тщательным сочетанием. Но я думаю, что это массив строк HTML, поэтому для сравнения свойств id требуется некоторое разбор. –

+0

Это хороший момент, я исправлю это. – lincolnk

+0

Thanx, в моем коде это дублирует все #ID. Пожалуйста, позвольте мне проверить его, чтобы увидеть, где я делаю это неправильно. – Mircea

Смежные вопросы