Javascript.RU

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

Группировка в двухмерном массиве
Всем привет!
Подскажите как лучше в 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

Заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2010, 22:35
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

if('Подскажите как реализовать'=='Сделайте, а то мне лениво вникать') alert('Пшел вон!!!')
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2010, 05:59
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

возможно, лучше сделать это в БД
но если делать в js... какие ты видишь варианты?
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2010, 08:42
Новичок на форуме
Отправить личное сообщение для corbon Посмотреть профиль Найти все сообщения от corbon
 
Регистрация: 30.06.2010
Сообщений: 5

В БД не хотелось бы, в js кроме варианта как перебрать записи в массиве и класть в другой массив сравнивая и суммирую их пока не придумал, поэтому написал сюда, есть другие варианты?
Ответить с цитированием
  #5 (permalink)  
Старый 01.07.2010, 09:54
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Как вариант: использовать другой массив для хранения индексов первых элементов каждого ключа. При встрече с ключем проверяем, нет ли у нас его идекса в массиве. Если есть, то прибавляем значения текущего ряда к ряду, полученному по индексу и удаляет текущий ряд, иначе сохраняем индекс.
Проблема лишь в том, что из-за этого образуются "дырки" в массиве, т.е. как-то так:
0 - array
1 - undefined
2 - undefined
3 - array
4 - undefined
Ответить с цитированием
  #6 (permalink)  
Старый 01.07.2010, 11:28
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от corbon
В БД не хотелось бы
а что значит не хотелось бы? Не умею, поэтому буду делать как прийдется?
Ответить с цитированием
  #7 (permalink)  
Старый 01.07.2010, 11:51
Новичок на форуме
Отправить личное сообщение для corbon Посмотреть профиль Найти все сообщения от corbon
 
Регистрация: 30.06.2010
Сообщений: 5

Сообщение от x-yuri Посмотреть сообщение
а что значит не хотелось бы? Не умею, поэтому буду делать как прийдется?
В БД как раз это делается очень легко и с этим проблем нет. Дело в том что я получаю эти данные в xml, кладу в массив, обрабатываю и кладу в БД. Агрегировать их потом в БД мне не очень удобно. Поэтому и спрашиваю нет ли какого механизма в js который позволяет делать группировки, аналог array_unique, array_count_values итп в php например. Спасибо.
Ответить с цитированием
  #8 (permalink)  
Старый 01.07.2010, 11:52
Новичок на форуме
Отправить личное сообщение для corbon Посмотреть профиль Найти все сообщения от corbon
 
Регистрация: 30.06.2010
Сообщений: 5

Сообщение от x-yuri Посмотреть сообщение
а что значит не хотелось бы? Не умею, поэтому буду делать как прийдется?
Сообщение от B@rmaley.e><e Посмотреть сообщение
Как вариант: использовать другой массив для хранения индексов первых элементов каждого ключа. При встрече с ключем проверяем, нет ли у нас его идекса в массиве. Если есть, то прибавляем значения текущего ряда к ряду, полученному по индексу и удаляет текущий ряд, иначе сохраняем индекс.
Проблема лишь в том, что из-за этого образуются "дырки" в массиве, т.е. как-то так:
0 - array
1 - undefined
2 - undefined
3 - array
4 - undefined
Спасибо за алгоритм, примерно так я себе это и представлял, просто думал может в js есть более простой вариант .
Ответить с цитированием
  #9 (permalink)  
Старый 01.07.2010, 13:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

а мы тут плюшками балуемся
<!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>
Ответить с цитированием
  #10 (permalink)  
Старый 01.07.2010, 16:36
Новичок на форуме
Отправить личное сообщение для corbon Посмотреть профиль Найти все сообщения от corbon
 
Регистрация: 30.06.2010
Сообщений: 5

Рони, спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить количество элементов в многомерном массиве Dima00782 Общие вопросы Javascript 3 12.06.2010 14:15
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26
Объекты в массиве. delias Общие вопросы Javascript 2 21.04.2010 22:28
Поиск в двумерном массиве Vamp Общие вопросы Javascript 2 16.07.2009 13:05
видимость предка в массиве scuter Общие вопросы Javascript 4 13.08.2008 20:16