我有一些来自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 :(得分: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++)
答案 1 :(得分:0)
这是一个简单的JS操作和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);
答案 2 :(得分:0)
非常简单的例子。迭代其中一个数组,然后通过索引从另一个数据中获取。
var cities = []
angular.forEach(data.id, function(id, index) {
var city = {id: id, city: data.city[index]};
cities.push(city);
});
答案 3 :(得分:0)
Iterator可以帮到你。 e.g:
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}]