Группировка в двухмерном массиве
Всем привет!
Подскажите как лучше в Javascript реализовать группировку в двухмерном массиве с суммированием значений. Имеем матрицу вида: 12.01.2010 32 45 12 12.01.2010 3 33 56 14.01.2010 89 67 98 11.01.2010 9 22 9 12.01.2010 67 99 23 13.01.2010 54 77 5 необходимо привести к виду: 12.01.2010 102 177 91 14.01.2010 89 67 98 11.01.2010 9 22 9 13.01.2010 54 77 5 Заранее спасибо! |
if('Подскажите как реализовать'=='Сделайте, а то мне лениво вникать') alert('Пшел вон!!!') |
возможно, лучше сделать это в БД
но если делать в js... какие ты видишь варианты? |
В БД не хотелось бы, в js кроме варианта как перебрать записи в массиве и класть в другой массив сравнивая и суммирую их пока не придумал, поэтому написал сюда, есть другие варианты?
|
Как вариант: использовать другой массив для хранения индексов первых элементов каждого ключа. При встрече с ключем проверяем, нет ли у нас его идекса в массиве. Если есть, то прибавляем значения текущего ряда к ряду, полученному по индексу и удаляет текущий ряд, иначе сохраняем индекс.
Проблема лишь в том, что из-за этого образуются "дырки" в массиве, т.е. как-то так: 0 - array 1 - undefined 2 - undefined 3 - array 4 - undefined |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
а мы тут плюшками балуемся
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title></title> </head> <body> <script language="JavaScript" type="text/javascript"> a=[]; a[0]="12.01.2010 32 45 12"; a[1]="12.01.2010 3 33 56"; a[2]="14.01.2010 89 67 98"; a[3]="11.01.2010 9 22 9"; a[4]="12.01.2010 67 99 23"; a[5]="13.01.2010 54 77 5"; b=[]; for (var d = 0; d < a.length; d++) { c = a[d].split(/\s+/g); if (b[c[0]] == null) b[c[0]] = [c[0], 0, 0, 0]; b[c[0]][1] += parseInt(c[1], 10); b[c[0]][2] += parseInt(c[2], 10); b[c[0]][3] += parseInt(c[3], 10) } a = []; d = 0; for (k in b) {document.write(a[d++]=b[k].join(" ") + "<br />")}; </script> </body> </html> |
Рони, спасибо!
|
Часовой пояс GMT +3, время: 20:51. |