2013-12-05 3 views
1

У меня есть массив объектов, у которого есть массив треков. То, что я хотел бы сделать, это сравнить значения mbid во всех объектах дорожки, проверить, есть ли какие-либо дубликаты, и сохранить дубликаты объектов трека в новый массив. Любая помощь или руководство?Javascript/jQuery Проверить повторяющиеся значения в объектах

[ 
    { 
    "track": [ 
     { 
     "name": "Radiapathy", 
     "mbid": "4c0767f1-1c2e-4790-a8d1-ee7f78f0ac84", 
     "url": "http://www.last.fm/music/The+Velvet+Teen/_/Radiapathy" 
     }, 
     { 
     "name": "How Did I Get Here", 
     "mbid": "64b3078f-89cd-4ad5-bc7a-b43af082b00f", 
     "url": "http://www.last.fm/music/Odesza/_/How+Did+I+Get+Here" 
     }, 
     { 
     "name": "Sunshine Roof", 
     "mbid": "837db975-c93e-45ca-992c-0c924ef0f34f", 
     "url": "http://www.last.fm/music/The+Innocence+Mission/_/Sunshine+Roof" 
     } 
    ] 
    }, 
    { 
    "track": [ 
     { 
     "name": "Traveling", 
     "mbid": "b40c24b8-3295-4219-af59-855b69958ca2", 
     "url": "http://www.last.fm/music/Tennis/_/Traveling" 
     }, 
     { 
     "name": "Ghost", 
     "mbid": "6273ae8f-3d2c-44c6-8c0d-53013ba79b4e", 
     "url": "http://www.last.fm/music/Neutral+Milk+Hotel/_/Ghost" 
     }, 
     { 
     "name": "Strange", 
     "mbid": "5a015df2-6c4a-4192-bea8-14ec5f297713", 
     "url": "http://www.last.fm/music/Built+to+Spill/_/Strange" 
     } 
    ] 
    }, 
    { 
    "track": [ 
     { 
     "name": "Radiapathy", 
     "mbid": "4c0767f1-1c2e-4790-a8d1-ee7f78f0ac84", 
     "url": "http://www.last.fm/music/The+Velvet+Teen/_/Radiapathy" 
     }, 
     { 
     "name": "Let Me Show You Love", 
     "mbid": "", 
     "url": "http://www.last.fm/music/Cut+Copy/_/Let+Me+Show+You+Love" 
     }, 
     { 
     "name": "Footsteps", 
     "mbid": "", 
     "url": "http://www.last.fm/music/Cut+Copy/_/Footsteps" 
     } 
    ] 
    } 
] 
+1

Можете ли вы поделиться тем, что вы уже пробовали до сих пор? – mayabelle

+0

Вам нужна помощь в реализации или вы просто проверяете, есть ли что-то уже реализовано? –

ответ

3

Ответ на этот вопрос (Elminating duplicates in a JSON object) довольно многое отвечает за вами. Я использовал это («Smart (ER) путь») и скорректированная в соответствии с вашими требованиями массива &:

var key = null; 
var noDupes = []; 
var dupes = []; 
for (var i = 0; i < arr.length; i++) 
{ 
    // loop through each track: 
    for (var j = 0; j < arr[i].track.length; j++) 
    { 
     key = arr[i].track[j].mbid; 
     if (!hash.contains(key)) 
     { 
      hash.add(key); 
      noDupes.push(arr[i].track[j]); // if not duplicate 
     } 
     else 
     { 
      dupes.push(arr[i].track[j]); // if duplicate 
     } 
    } 
} 

http://jsfiddle.net/6wspy/

+0

Это отлично работает. Наверное, я все еще смущен тем, что происходит в этой функции hash. – cusejuice

+0

Он использует прототипы javascript. Это может быть интересно прочитать для вас: http://stackoverflow.com/questions/572897/how-does-javascript-prototype-work – jzm

+0

Но что касается объекта хэша, он хранит каждое значение, которое вы проверяете обманы для (в вашем случае, mbid). Таким образом, в приведенном выше примере хэш имеет в себе объект «ключей», в котором хранится каждый добавленный «mbid». Поэтому, когда вы делаете цикл над массивом, он проверяет, находится ли он в объекте хеш-ключей, и соответственно добавляет его в noDupes или dupes. Надеюсь, это имеет смысл ... – jzm

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