Javascript.RU

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

ассоциативный массив где ключ это год или .....
Люди подскажите как выйти из положения
есть массив в котором есть поля
id data desc .....
(поле data - dd-mm-yyyy)

надо получить второй массив в котором перечисленны все года попавшиеся в массиве 1
и к каждому из этих годов перечисленны id записей с этим годом из массива 1
например
2008=0,12,16,95,148
2007=5,7,9,15
.........

или может как по другому решить задачку

Последний раз редактировалось Sandr, 16.07.2008 в 15:43.
Ответить с цитированием
  #2 (permalink)  
Старый 16.07.2008, 19:44
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Sandr, проходите циклом по массиву, создавая новый объект, ключами которого будут годы, а значениями - id-шники (можно приплюсовывать через запятую, как в вашем примере, а можно значением ключа сделать так же массив и добавлять id'шники в массив);
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 16.07.2008 в 20:23.
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2008, 08:39
Новичок на форуме
Отправить личное сообщение для Sandr Посмотреть профиль Найти все сообщения от Sandr
 
Регистрация: 16.07.2008
Сообщений: 8

Спасибо
Вот создал объект и .....
а как правильней перечислить id для каждого года?

я пошел кривой дорогой - создал для каждого года ключи с id
var yearProj = new Object;
for (i=0; i < rootArray.length; i++){
	var year = rootArray[i][1].substr(0,4)
	if (!yearProj[year])
		yearProj[year] = new Object;

	yearProj[year][i] = true;
}

Последний раз редактировалось Sandr, 17.07.2008 в 10:22.
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2008, 12:34
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от Sandr
а как правильней перечислить id для каждого года?
Как удобнее. Можно строкой через запятую, можно объектом (только id, как я понимаю, не равен i, т.е.

yearProj[year][rootArray[i][0]] = true;


а не yearProj[year][i] = true; ). Если через запятую, то просто приплюсовывайте -

yearProj[year] += rootArray[i][0] + ',';


(в конце последнюю запятую нужно удалить будет);

Полученную строку, потом легко преобразовать в массив - методом split(','), например.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 17.07.2008 в 12:36.
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2008, 13:25
Новичок на форуме
Отправить личное сообщение для Sandr Посмотреть профиль Найти все сообщения от Sandr
 
Регистрация: 16.07.2008
Сообщений: 8

Снова спасибо
я пришел из PHP поэтому и мыслю по PHP...
Сообщение от Dmitry A. Soshnikov
только id, как я понимаю, не равен i
как мне из rootArray получить строчку с нужным id?
в случае с
yearProj[year][i] = true;

я просто обращаюсь к rootArray[yearProj[year][1]]
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2008, 13:32
Новичок на форуме
Отправить личное сообщение для Sandr Посмотреть профиль Найти все сообщения от Sandr
 
Регистрация: 16.07.2008
Сообщений: 8

и еще один вопрос
все тотже массив в котором есть поля
id data name desc ..
нужно собрать массив с подмассивами где name начинается с буквы в промежутках [а-ж] [з-н] [о-у] [ф-я]
пример:
новыймассив([а-ж]= 1,8,9,12,65;[з-н]=19,22,29,64......)

этот скрипт мне соберет только перечиления букв- и соответсвующих им i
var letter = rootArray[i][2].substr(0,1).toLowerCase()
if (!letterPoj[letter])
	letterPoj[letter] = new Object;
letterProj[letter][i] = true;

Последний раз редактировалось Sandr, 17.07.2008 в 13:39.
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2008, 16:56
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

По поводу годов (один из вариантов - собирать id-шники по году в массив):

var rootArray = [
  [1, '2008-07-17'],
  [2, '2008-07-17'],
  [3, '2007-07-17']
];

var yearProj = {};
var year;

for (var k = 0; k < rootArray.length; k++) {
  year = rootArray[k][1].substr(0, 4);
  // алтернативная запись - if (..) {...}
  !yearProj[year] && (yearProj[year] = []);
  // собираем в массив
  yearProj[year].push(rootArray[k][0]);
}

// проверка
for (var k in yearProj) {
  alert(yearProj[k]);
  // чтобы получить строку из массива,
  // можно применить join(',')
  alert('Строка: ' + yearProj[k].join(','))
}


По поводу букв можно проверить регулярными выражениями (только проверять коды букв, т.к. у вас русские буквы используются).
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 17.07.2008 в 17:05.
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2008, 13:54
Новичок на форуме
Отправить личное сообщение для Sandr Посмотреть профиль Найти все сообщения от Sandr
 
Регистрация: 16.07.2008
Сообщений: 8

Особенное спасибо за комментарии
к коду
Вот бы кто подсказал хорошую статейку по сравненению программинга в php и в js
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2008, 14:39
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sandr
по сравненению программинга в php и в js
А не надо их сравнивать. Это два абсолютно разных языка.
Ответить с цитированием
Ответ



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

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