Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2016, 12:03
tai tai вне форума
Аспирант
Отправить личное сообщение для tai Посмотреть профиль Найти все сообщения от tai
 
Регистрация: 16.01.2013
Сообщений: 98

Сгруппировать элементы
Добрый день!
Помогите сгруппировать элементы.

Есть массив объектов:

[
{areaCode: "019-001", areaName: "019-001", status: "НЕ-ПРОВЕРЯЛСЯ", amount: 8},
{areaCode: "019-001", areaName: "019-001", status: "ПРОВЕРЕН", amount: 103},
{areaCode: "019-006", areaName: "019-006", status: "В-СТАДИИ-ПРОВЕРКИ", amount: 2},
{areaCode: "019-006", areaName: "019-006", status: "ПРОВЕРЕН", amount: 89},
{areaCode: "019-006", areaName: "019-006", status: "НЕ-ПРОВЕРЯЛСЯ", amount: 89}
]


Из него нужно получить такой массив

[
{areaCode: "019-001", areaName: "019-001", status1: "НЕ-ПРОВЕРЯЛСЯ", amount: 8, status2: "ПРОВЕРЕН", amount: 103},
{areaCode: "019-006", areaName: "019-006", status1: "В-СТАДИИ-ПРОВЕРКИ", amount: 2,  status2: "ПРОВЕРЕН", amount: 89, status3: "НЕ-ПРОВЕРЯЛСЯ", amount: 89}
]
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2016, 12:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от tai
Из него нужно получить такой массив
не получится ... одно свойство не может дублироватся в обьекте
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2016, 14:57
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Получится вот такой
var arrnew = [
                    { areaCode: "019-001", areaName: "019-001", statcond: [ {status: "НЕ-ПРОВЕРЯЛСЯ", amount: 8 },
                                                                            {status: "ПРОВЕРЕН", amount: 103 }]},
                    { areaCode: "019-006", areaName: "019-006", statcond: [ {status: "В-СТАДИИ-ПРОВЕРКИ", amount: 2 },
                                                                            {status: "ПРОВЕРЕН", amount: 89 },
                                                                            {status: "НЕ-ПРОВЕРЯЛСЯ", amount: 89 }]}
       ];
       alert(arrnew[1].statcond[1].status + ' ' + arrnew[1].statcond[1].amount );
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2016, 15:38
tai tai вне форума
Аспирант
Отправить личное сообщение для tai Посмотреть профиль Найти все сообщения от tai
 
Регистрация: 16.01.2013
Сообщений: 98

А как можно получить его в таком виде?

var newArr2 = data.sort(function(a,b){return a.areaCode < b.areaCode ? -1 : 1;}).reduce(function(arr, el){
                    if(!arr.length || arr[arr.length - 1].areaCode != el.areaCode) {
                        el.statcond = {
                            status: el.status,
                            amount: el.amount
                        };
                        arr.push(el);
                    }
                    return arr;
                }, []);
                console.log( newArr2 );

Последний раз редактировалось tai, 01.04.2016 в 15:46.
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2016, 16:44
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

tai,
Вот пример алгоритма формирования:
var arr = [
                    { areaCode: "019-001", areaName: "019-001", status: "НЕ-ПРОВЕРЯЛСЯ", amount: 8 },
                    { areaCode: "019-001", areaName: "019-001", status: "ПРОВЕРЕН", amount: 103 },
                    { areaCode: "019-006", areaName: "019-006", status: "В-СТАДИИ-ПРОВЕРКИ", amount: 2 },
                    { areaCode: "019-006", areaName: "019-006", status: "ПРОВЕРЕН", amount: 89 },
                    { areaCode: "019-006", areaName: "019-006", status: "НЕ-ПРОВЕРЯЛСЯ", amount: 89 }
                  ];

       var i = 0, j = 0, k = 0, arrnew = [];
       while (i < arr.length) {
           if (!arrnew[j]) {
               k = 0;
               arrnew[j] = { areaCode: arr[i].areaCode,
                   areaName: arr[i].areaName,
                   statcond: { status: arr[i].status,
                               amount: arr[i].amount
                   }
               };
          }
          else {
              if (arrnew[j].areaCode == arr[i].areaCode) {
                 arrnew[j].statcond[k] = { status: arr[i].status,
                                           amount: arr[i].amount };
                 k++;
                 i++;
              }
              else {
                  j++;
              }    
          }
       }
    alert(arrnew[1].statcond[1].status + ' ' + arrnew[1].statcond[1].amount);

А ваш алгоритм - не знаю, смотреть надо...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы добавленные в dom freelancerphpcss Events/DOM/Window 4 30.07.2015 18:00
Как вернуть div и все вложенные в него элементы в первоначальное состояние? lucky89 Общие вопросы Javascript 17 26.02.2015 18:41
Скрыть/показать элементы в зависимости от значения select AnyKeyLeft Элементы интерфейса 12 16.07.2014 16:26
Выбрать элементы, в которые вложен элемент с id. Вадимчег jQuery 3 24.11.2012 10:38
Не могу удалить клонируемые элементы ViktorCore Элементы интерфейса 11 20.12.2011 20:24