Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнение элементов массива (https://javascript.ru/forum/misc/5533-sravnenie-ehlementov-massiva.html)

neurostep 21.10.2009 15:29

Сравнение элементов массива
 
Здравствуйте, уважаемые!
Прошу Вас о помощи! Есть массив объектов [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 - искомый

e1f 21.10.2009 16:49

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]);
    }
}

neurostep 21.10.2009 17:17

Цитата:

Сообщение от e1f (Сообщение 33093)
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]);
    }
}


Спасибо огромное, по алгоритму вроде работает, но элементы в массивах пустые:(
Можете подробнее описать, что делается?

e1f 21.10.2009 17:18

что значит пустые? Пример в студию

neurostep 21.10.2009 17:22

Цитата:

Сообщение от e1f (Сообщение 33097)
что значит пустые? Пример в студию

Простите пожалуйста, сам дурак:haha: Все отлично работает, спасибо огромное!!!!
unshift - понятно что делает, а вот
tmp_hash[array_exists_cont[i].node_col] || (tmp_hash[array_exists_cont[i].node_col] = []);


Можно поподробнее алгоритм?:)

e1f 21.10.2009 17:55

  1. unshift вместо push -- исключительно потому, что я пробегал массив с конца.
  2. это то же самое, что и
    if (!tmp_hash[array_exists_cont[i].node_col]) {
        tmp_hash[array_exists_cont[i].node_col] = [];
    }
    

neurostep 21.10.2009 17:59

Спасибо большое!!


Часовой пояс GMT +3, время: 04:15.