2016-04-22 3 views
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-х объектов, но ваш исходный объект выглядит как он имеет только _two_ элементов в каждом из массивов, где третий объект приходит? – Himmel

+0

Вы назначаете новый объект vm.Cities на каждую итерацию. Если vm.Cities является массивом, вы должны .push новый объект на него. – spaceman

+0

Можете ли вы дать мне более четкое представление о том, что дает вам контроллер - это массив объектов OR 1, с городом, id-ключами, и вы хотите раскрутить массивы и вернуть обратно объекты на их основе. посмотри, что я говорю? –

ответ

1

Вам не нужен угловой для этого, простой 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 массивы имеют одинаковую длину (которая на самом деле не имеет смысла если они не были), но в случае, они не те же длины, вы хотели бы, чтобы внести незначительные изменения в вашей цикл:

var maxLen = Math.max(object.id.length, object.city.length); 
for (var i = 0; i < maxLen; i++) 
+0

Спасибо! это сработало :) – logan

0

Это простой JS Operati и here is the demo

// 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); 
0

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

var cities = [] 
angular.forEach(data.id, function(id, index) { 
    var city = {id: id, city: data.city[index]}; 
    cities.push(city); 
}); 
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}] 
Смежные вопросы