ассоциативный массив где ключ это год или .....
Люди подскажите как выйти из положения
есть массив в котором есть поля id data desc ..... (поле data - dd-mm-yyyy) надо получить второй массив в котором перечисленны все года попавшиеся в массиве 1 и к каждому из этих годов перечисленны id записей с этим годом из массива 1 например 2008=0,12,16,95,148 2007=5,7,9,15 ......... или может как по другому решить задачку |
Sandr, проходите циклом по массиву, создавая новый объект, ключами которого будут годы, а значениями - id-шники (можно приплюсовывать через запятую, как в вашем примере, а можно значением ключа сделать так же массив и добавлять id'шники в массив);
|
Спасибо
Вот создал объект и ..... а как правильней перечислить 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; } |
Цитата:
yearProj[year][rootArray[i][0]] = true; а не yearProj[year][i] = true; ). Если через запятую, то просто приплюсовывайте - yearProj[year] += rootArray[i][0] + ','; (в конце последнюю запятую нужно удалить будет); Полученную строку, потом легко преобразовать в массив - методом split(','), например. |
Снова спасибо
я пришел из PHP поэтому и мыслю по PHP... Цитата:
в случае с yearProj[year][i] = true; я просто обращаюсь к rootArray[yearProj[year][1]] |
и еще один вопрос
все тотже массив в котором есть поля 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; |
По поводу годов (один из вариантов - собирать 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(',')) } По поводу букв можно проверить регулярными выражениями (только проверять коды букв, т.к. у вас русские буквы используются). |
Особенное спасибо за комментарии
к коду Вот бы кто подсказал хорошую статейку по сравненению программинга в php и в js |
Цитата:
|
Часовой пояс GMT +3, время: 02:11. |