I_Love_Emma_Watson
@I_Love_Emma_Watson

Как преобразовать массив в такой объект?

Помогите плиз, нужно преобразовать такой массив: 5a6a399bec58f205509495.png
в такой объект: 5a6a39b3276cb057115305.png
но при этом количество ключей может меняться, например может добавиться штат, типа city_name: "Chicago", state: "IL"
var array = [
    "weather_c",
    "+30",
    "population",
    10000000,
    "city_name",
    "Los angeles",
    "weather_c",
    "+15",
    "population",
    5000000,
    "city_name",
    "Chicago"
  ];
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Надо делать пустой объект и двигаясь по массиву набивать его парами ключ-значение.
Как только пошёл повтор ключа – это новый объект. Тот заполненный выкидываем в результат, и начинаем заполнять новый пустой.

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"}}
*/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Alibek-kz
$new_arr = [];
$limit = 6;
$count = (int) floor(count($array) / $limit);

for($i = 0; $i<$count; $i++) {
    $new_arr[] = [
        'weather_c' => $array[($limit * $i) + 1],
        'population' => $array[($limit * $i) + 3],
        'city_name' => $array[($limit * $i) + 5]
    ];
}

$obj = (object) $new_arr;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы