Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2009, 15:29
Аспирант
Отправить личное сообщение для neurostep Посмотреть профиль Найти все сообщения от neurostep
 
Регистрация: 10.04.2008
Сообщений: 83

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

Последний раз редактировалось neurostep, 21.10.2009 в 15:41.
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2009, 16:49
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

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]);
    }
}
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2009, 17:17
Аспирант
Отправить личное сообщение для neurostep Посмотреть профиль Найти все сообщения от neurostep
 
Регистрация: 10.04.2008
Сообщений: 83

Сообщение от e1f Посмотреть сообщение
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]);
    }
}

Спасибо огромное, по алгоритму вроде работает, но элементы в массивах пустые
Можете подробнее описать, что делается?
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2009, 17:18
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

что значит пустые? Пример в студию
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2009, 17:22
Аспирант
Отправить личное сообщение для neurostep Посмотреть профиль Найти все сообщения от neurostep
 
Регистрация: 10.04.2008
Сообщений: 83

Сообщение от e1f Посмотреть сообщение
что значит пустые? Пример в студию
Простите пожалуйста, сам дурак Все отлично работает, спасибо огромное!!!!
unshift - понятно что делает, а вот
tmp_hash[array_exists_cont[i].node_col] || (tmp_hash[array_exists_cont[i].node_col] = []);


Можно поподробнее алгоритм?
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2009, 17:55
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

  1. unshift вместо push -- исключительно потому, что я пробегал массив с конца.
  2. это то же самое, что и
    if (!tmp_hash[array_exists_cont[i].node_col]) {
        tmp_hash[array_exists_cont[i].node_col] = [];
    }
    
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2009, 17:59
Аспирант
Отправить личное сообщение для neurostep Посмотреть профиль Найти все сообщения от neurostep
 
Регистрация: 10.04.2008
Сообщений: 83

Спасибо большое!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск одинаковых значений элементов массива Valstor Общие вопросы Javascript 20 09.12.2011 18:56
Просмотр массива Igor Я не знаю javascript 10 21.05.2009 17:03
Помогите решить задачку---Найти сумму элементов массива uniQ Общие вопросы Javascript 3 02.05.2009 01:20
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
вставка элементов массива в текстовую форму по клику olezyk Общие вопросы Javascript 3 21.03.2009 22:01