Решение данной задачи предполагает перебор элементов массива и создание на его основе трансформированных новых значений.
Теория вопроса:
Простая и
Умная
Простые (канонические - до ES6) варианты:
Имеющийся объект для трансформации задан.
// Имеем объект, представляющий из себя массив простых объектов
oldObj = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"},
{"id": "US", "count": 4514, "title": "United States"},
{"id": "MY", "count": 390, "title": "Malaysia"},
{"id": "IT", "count": 208, "title": "Italy"}
]
};
Решения:
1. С использованием метода
map и созданием отдельной функции:
// при желании функцию трансформации можно назвать конструктором со всеми вытекающими...
function transform(oO){
var rv = {}; // return value
rv.areas = oO.mh.map(function(str){
var rs = {}; // return string
rs.id = str.id;
rs.title = str.title + " - " + str.count;
return rs;
});
return rv;
};
var newObj1 = transform(oldObj);
// В случае конструктора
// var newObj1 = new Transform(oldObj)
console.log(newObj1);
// полученный объект
Вариант 1.2 С использованием метода
map без создания отдельной функции:
var newObj2 = {};
newObj2.areas = oldObj.mh.map(function(str){
var rs = {}; // return string
rs.id = str.id;
rs.title = str.title + " - " + str.count;
return rs;
});
2. 1Перебор массива
(forEach) без метода
mapvar newObj3 = {"areas":[]};
oldObj.mh.forEach(function(str){
var ps = {}; // pushed string
ps.id = str.id;
ps.title = str.title + " - " + str.count;
newObj3.areas.push(ps);
});
2.2 Перебор массива с использованием цикла
forvar newObj4 = {"areas":[]};
for (var i = 0; i<oldObj.mh.length;i++) {
var str = oldObj.mh[i];
var ps = {};
ps.id = str.id;
ps.title = str.title + " - " + str.count;
newObj4.areas.push(ps);
}
Стрелочные функции, показанные в предыдущих ответах могут работать не во всех браузерах, хотя с точки зрения оптимизации кода - более эффективны...