如何将数组的对象转换为对象
问题描述:
我有一些数据从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++)
+0
谢谢!有效 :) – logan
答
这是一个简单的JS operati on和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);
答
很简单的例子。迭代其中一个数组并通过索引从另一个数组中获取。
var cities = []
angular.forEach(data.id, function(id, index) {
var city = {id: id, city: data.city[index]};
cities.push(city);
});
答
迭代器可以帮助你。例如:
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}]
您声明您需要输出,但是是一个包含3个对象的数组,但您的初始对象看起来像只在每个数组中有_two_项,其中第三个对象来自哪里? – Himmel
您每次迭代都将新对象分配给vm.Cities。如果vm.Cities是一个数组,则应该将新对象拖放到它上面。 – spaceman
你能给我一个清晰的控制器给你的东西 - 它是一个对象或者一个对象,一个城市,id - 键的数组,并且你想展开数组并且根据它们返回对象。看看我在说什么? –