Надо делать пустой объект и двигаясь по массиву набивать его парами ключ-значение.
Как только пошёл повтор ключа – это новый объект. Тот заполненный выкидываем в результат, и начинаем заполнять новый пустой.
var arr = [
"weather_c",
"+30",
"population",
10000000,
"city_name",
"Los angeles",
"weather_c",
"+15",
"population",
5000000,
"city_name",
"Chicago"
];
var data = {}
var index = 1;
var i, key, value;
var obj = {}
for(i = 1; i < arr.length; i+=2) {
key = arr[i-1];
value = arr[i];
if( obj.hasOwnProperty(key)) {
data[index.toString()] = Object.assign({}, obj);
index++;
obj = {}
}
obj[key] = value;
}
data[index.toString()] = Object.assign({}, obj);
JSON.stringify(data)
/*
{"1": {"weather_c":"+30","population":10000000,"city_name":"Los angeles"},
"2": {"weather_c":"+15","population":5000000,"city_name":"Chicago"}}
*/