01.04.2016, 12:03
|
Аспирант
|
|
Регистрация: 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}
]
|
|
01.04.2016, 12:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от tai
|
Из него нужно получить такой массив
|
не получится ... одно свойство не может дублироватся в обьекте
|
|
01.04.2016, 14:57
|
Профессор
|
|
Регистрация: 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 );
|
|
01.04.2016, 15:38
|
Аспирант
|
|
Регистрация: 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.
|
|
01.04.2016, 16:44
|
Профессор
|
|
Регистрация: 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);
А ваш алгоритм - не знаю, смотреть надо...
|
|
|
|