Сгруппировать элементы
Добрый день!
Помогите сгруппировать элементы. Есть массив объектов: [ {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} ] |
Цитата:
|
Получится вот такой
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 ); |
А как можно получить его в таком виде?
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,
Вот пример алгоритма формирования: 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); А ваш алгоритм - не знаю, смотреть надо... |
Часовой пояс GMT +3, время: 02:36. |