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"
  ];
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Надо делать пустой объект и двигаясь по массиву набивать его парами ключ-значение.
Как только пошёл повтор ключа – это новый объект. Тот заполненный выкидываем в результат, и начинаем заполнять новый пустой.

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;
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Grabr Inc. Москва
от 2 500 до 4 500 usd.
KUPIBILET.RU Санкт-Петербург
от 100 000 до 130 000 руб.
22 июля 2018, в 20:41
10000 руб./за проект
22 июля 2018, в 20:13
2000 руб./за проект