【问题标题】:How to convert Object of Arrays to Objects如何将数组的对象转换为对象
【发布时间】:2016-04-22 17:38:39
【问题描述】:

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

});

任何人都可以给我一个提示,比如我哪里出错了,或者什么是实现这一目标的最佳方法。提前致谢。

【问题讨论】:

  • 您说您想要输出,但它是一个包含 3 个对象的数组,但您的初始对象看起来每个数组中只有 两个 项,其中第三个物体来自哪里?
  • 每次迭代都将新对象分配给 vm.Cities。如果 vm.Cities 是一个数组,你应该 .push 新对象到它上面。
  • 你能更清楚地告诉我控制器给你什么吗 - 它是一个对象数组或 1 个对象,带有一个城市,id - 键,你想解开数组和手吗?基于它们的返回对象.. 明白我在说什么?
  • 对不起,那是我的错。立即更正帖子
  • 它只返回一个带有城市、id 键的对象,我希望一个对象只有一个 id 和城市

标签: javascript angularjs json object


【解决方案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++)

【讨论】:

    【解决方案2】:

    这是一个简单的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);
    

    【讨论】:

      【解决方案3】:

      非常简单的例子。遍历其中一个数组并按索引从另一个数组中抓取。

      var cities = []
      angular.forEach(data.id, function(id, index) {
          var city = {id: id, city: data.city[index]};
          cities.push(city);
      });
      

      【讨论】:

        【解决方案4】:

        迭代器可以帮助你。例如:

        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}]
        

        【讨论】:

          猜你喜欢
          • 2022-01-23
          • 2018-02-13
          • 1970-01-01
          • 1970-01-01
          • 2020-06-15
          • 2016-03-11
          • 2021-06-20
          相关资源
          最近更新 更多