У меня есть данные, поступающие с контроллера 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
}
});
Может кто-нибудь, пожалуйста, дайте мне подсказку, как там, где я иду не так, или что это лучший способ достичь этого. Заранее спасибо.
Вам не нужен 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++)
Итератор может вам помочь. например:
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}]
Очень простой пример. Итерации по одному из массивов и захват от другого по индексу.
var cities = []
angular.forEach(data.id, function(id, index) {
var city = {id: id, city: data.city[index]};
cities.push(city);
});
Это простая операция 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);