如何将对象转换为对象

时间:2016-04-22 17:38:39

标签: javascript angularjs json object

我有一些来自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
    }

});

任何人都可以给我一个提示,如我出错的地方或实现这一目标的最佳方式。提前谢谢。

4 个答案:

答案 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

请记住,该函数假设您的idcity数组都具有相同的长度(如果不是这样,那真的没有意义),但对于它们的情况而言如果长度不一样,你会想要在你的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}]