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

0

У меня есть данные, поступающие с контроллера MVC в следующем формате:

{id: Array[3], city: Array[3]}

Я хотел бы преобразовать эти данные в

[Object, Object, Object]

который будет иметь структуру Object0{id, city}, Object1{id, city}, Object2{id, city}

Я пробовал метод ниже, но не работал

angular.forEach(data, function(){

    vm.Cities = {
        id :data.citiesIDs,
        city : data.citiesStr
    }

});

Может кто-нибудь, пожалуйста, дайте мне подсказку, как там, где я иду не так, или что это лучший способ достичь этого. Заранее спасибо.

  • 0
    Вы заявили, что хотите получить вывод, но быть массивом с 3 объектами, но ваш исходный объект выглядит так, как будто в каждом из массивов есть только два элемента, откуда поступает третий объект?
  • 0
    Вы присваиваете новый объект vm.Cities на каждой итерации. Если vm.Cities - это массив, вы должны .push новый объект на него.
Показать ещё 3 комментария
Теги:
object

4 ответа

1
Лучший ответ

Вам не нужен Angular для этого, простой Javascript работает так же хорошо.

function transform(object) {
  var result = [];
  for (var i = 0; i < object.id.length; i++) {
    result.push({
      id: object.id[i],
      city: object.city[i]
    });
  }
  return result;
}

Затем вы можете позвонить своему помощнику с вашими данными:

var list = transform(data); // <-- list of (id,city) objects

Имейте в виду, что функция предполагает, что оба ваших id и city массивов имеют одинаковую длину (что действительно не имеет смысла, если они не были), НО для случая они не имеют одинаковой длины, вы хотели бы внести незначительные изменения в цикл for:

var maxLen = Math.max(object.id.length, object.city.length);
for (var i = 0; i < maxLen; i++)
  • 0
    Спасибо! это сработало :)
0

Итератор может вам помочь. например:

var data = {id: [1,2], city: ['Curitiba','São Paulo']};
    var array = [];
    for(var prop in data){
        var length = data[prop].length;
        for(var z = 0; z < length; z++){
            if(!array.hasOwnProperty(z)){
                array[z] = {};
            }
            array[z][prop] = data[prop][z];
        }
    }
    console.log(array);// [Object{city:'Curitiba',id:1},Object{city:'São Paulo',id:2}]
0

Очень простой пример. Итерации по одному из массивов и захват от другого по индексу.

var cities = []
angular.forEach(data.id, function(id, index) {
    var city = {id: id, city: data.city[index]};
    cities.push(city);
});
0

Это простая операция JS, и вот демонстрация

// Assuming obj is defined and both obj.id and obj.city are arrays

var obj = {
    id: [25, 82, 188, 141],
    city: ['Tokyo', 'Munich', 'Los Angeles', 'Sao Paolo'],
};

var max = Math.max(obj.id.length, obj.city.length);

var results = [];

for(var i = 0; i < max; i++) {
    var converted = {
        id: obj.id[i] ? obj.id[i] : null,
        city: obj.city[i] ? obj.city[i] : null
    };
    results.push(converted);
}

console.log('Coverted array', results);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню