Сравнение элементов массива
Здравствуйте, уважаемые!
Прошу Вас о помощи! Есть массив объектов [obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8]. У каждого из них есть свойство obj.col. Значения этих свойств у элементов могут совпадать. Я хочу сделать приблизительно следующее: Из данного массива, получить новый, элементами которого будут массивы с равными значениями obj.col Например: если obj1.col = obj3.col = obj5.col, и obj2.col = obj4.col, и obj6.col = obj7.col = obj8.col, то resArr = [[obj1, obj3, obj5], [obj2, obj4], [obj6, obj7, obj8]] Заранее всем спасибо! P.S.: кину пример кода, с помощью которого я пытался это сделать. Правда этот код только совпадения должен искать. Но он тоже почему-то не правильно работает: for(var i=0; i<array_exists_cont.length-1; i++) { for(var j=i+1; j<array_exists_cont.length; j++) { if(array_exists_cont[i].node_col == array_exists_cont[j].node_col) { var flag = true; var m=0; while(m < array_exists.length) { if(array_exists[m] == array_exists_cont[i]) { flag = false; m=array_exists.length; } m++; } if(flag) { array_exists.push(array_exists_cont[i]); } } } } array_exists_cont - данный массив array_exist - искомый |
var array_exists_cont = [{col:1}, {col:2}, {col:1}, {col:2}, {col:1}, {col:3}, {col:3}, {col:3} ], array_exists = []; function resort() { var tmp_hash = {}; for (var i=array_exists_cont.length; i--; ) { tmp_hash[array_exists_cont[i].col] || (tmp_hash[array_exists_cont[i].col] = []); tmp_hash[array_exists_cont[i].col].unshift(array_exists_cont[i]); } for (i in tmp_hash) { array_exists.push(tmp_hash[i]); } } |
Цитата:
Спасибо огромное, по алгоритму вроде работает, но элементы в массивах пустые:( Можете подробнее описать, что делается? |
что значит пустые? Пример в студию
|
Цитата:
unshift - понятно что делает, а вот tmp_hash[array_exists_cont[i].node_col] || (tmp_hash[array_exists_cont[i].node_col] = []); Можно поподробнее алгоритм?:) |
|
Спасибо большое!!
|
Часовой пояс GMT +3, время: 01:07. |