Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ассоциативный массив где ключ это год или ..... (https://javascript.ru/forum/misc/1423-associativnyjj-massiv-gde-klyuch-ehto-god-ili.html)

Sandr 16.07.2008 16:40

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

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

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

Dmitry A. Soshnikov 16.07.2008 20:44

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

Sandr 17.07.2008 09:39

Спасибо
Вот создал объект и .....
а как правильней перечислить 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;
}

Dmitry A. Soshnikov 17.07.2008 13:34

Цитата:

Сообщение от Sandr
а как правильней перечислить id для каждого года?

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

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


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

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


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

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

Sandr 17.07.2008 14:25

Снова спасибо
я пришел из PHP поэтому и мыслю по PHP...
Цитата:

Сообщение от Dmitry A. Soshnikov
только id, как я понимаю, не равен i

как мне из rootArray получить строчку с нужным id?
в случае с
yearProj[year][i] = true;

я просто обращаюсь к rootArray[yearProj[year][1]]

Sandr 17.07.2008 14:32

и еще один вопрос
все тотже массив в котором есть поля
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;

Dmitry A. Soshnikov 17.07.2008 17:56

По поводу годов (один из вариантов - собирать 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(','))
}


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

Sandr 18.07.2008 14:54

Особенное спасибо за комментарии
к коду
Вот бы кто подсказал хорошую статейку по сравненению программинга в php и в js

Kolyaj 18.07.2008 15:39

Цитата:

Сообщение от Sandr
по сравненению программинга в php и в js

А не надо их сравнивать. Это два абсолютно разных языка.


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