如何将数组的对象转换为对象

问题描述:

我有一些数据从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是一个数组,则应该将新对象拖放到它上面。 – spaceman

+0

你能给我一个清晰的控制器给你的东西 - 它是一个对象或者一个对象,一个城市,id - 键的数组,并且你想展开数组并且根据它们返回对象。看看我在说什么? –

你并不真的需要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}]