Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Преобразовать массив объектов (https://javascript.ru/forum/misc/62635-preobrazovat-massiv-obektov.html)

masquitos@mail.ru 21.04.2016 15:14

Преобразовать массив объектов
 
Коллеги, подскажите как преобразовать массив объектов из
[{"Fio":"Ivanov","Date":"January 16","Parametr":"200"},{"Fio":"Petrov","Date":"January 16","Parametr":"300"},{"Fio":"Ivanov","Date":"February 16","Parametr":"100"},{"Fio":"Petrov","Date":"February 16","Parametr":"150"},{"Fio":"Ivanov","Date":"March 16","Parametr":"400"},{"Fio":"Petrov","Date":"March 16","Parametr":"500"},{"Fio":"Sidorov","Date":"March 16","Parametr":"300"}]



в:
[{"Month":"January","Ivanov":"200","Petrov":"300"},{"Month":"February","Ivanov":"100","Petrov":"150"},{"Month":"March","Ivanov":"400","Petrov":"500","Sidorov":}]

laimas 21.04.2016 15:23

Что является источником этого объекта?

рони 21.04.2016 15:24

masquitos@mail.ru,
ваши данные даже не скопировать
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Decode 21.04.2016 16:38

var a = [{
	"Fio": "Ivanov",
	"Date": "January 16",
	"Parametr": "200"
}, {
	"Fio": "Petrov",
	"Date": "January 16",
	"Parametr": "300"
}, {
	"Fio": "Ivanov",
	"Date": "February 16",
	"Parametr": "100"
}, {
	"Fio": "Petrov",
	"Date": "February 16",
	"Parametr": "150"
}, {
	"Fio": "Ivanov",
	"Date": "March 16",
	"Parametr": "400"
}, {
	"Fio": "Petrov",
	"Date": "March 16",
	"Parametr": "500"
}, {
	"Fio": "Sidorov",
	"Date": "March 16",
	"Parametr": "300"
}];

var months = {};

a.forEach(function(item) {
	months[ item['Date'] ] = true;
});

var b = [];

Object.keys(months).forEach(function(month) {
	var newObj = {};
	newObj['Month'] = month.replace(/[\d+\s]/g, '');

	a.forEach(function(obj) {
		if (obj['Date'] == month) {
			newObj[ obj['Fio'] ] = obj['Parametr'];
		}
	});

	b.push(newObj);
});

console.log( JSON.stringify(b) );

рони 21.04.2016 16:44

:)
<script>
 var data = [{
        Fio: "Ivanov",
        Date: "January 16",
        Parametr: "200"
    }, {
        Fio: "Petrov",
        Date: "January 16",
        Parametr: "300"
    }, {
        Fio: "Ivanov",
        Date: "February 16",
        Parametr: "100"
    }, {
        Fio: "Petrov",
        Date: "February 16",
        Parametr: "150"
    }, {
        Fio: "Ivanov",
        Date: "March 16",
        Parametr: "400"
    }, {
        Fio: "Petrov",
        Date: "March 16",
        Parametr: "500"
    }, {
        Fio: "Sidorov",
        Date: "March 16",
        Parametr: "300"
    }],
    obj = {},
    data = data.reduce(function(b, c) {
        var a = c.Date.split(" ")[0];
        void 0 === obj[a] && (obj[a] = b.length, b[b.length] = {Month: a});
        a = obj[a];
        b[a][c.Fio] = c.Parametr;
        return b
    }, []);

document.write(JSON.stringify(data))
  </script>

masquitos@mail.ru 21.04.2016 18:11

Рони, спасибо!
Ваш код работает, буду его изучать.


Часовой пояс GMT +3, время: 18:18.