将数组对象数组转换为对象数组

时间:2017-05-11 19:22:25

标签: javascript angularjs arrays

我花了最后几个小时对上述问题进行了一些非常相似的回答,但经过一些循环和减少的实现后,我仍然没有得到我需要的解决方案。

我通过服务调用获取了一组对象。我正在将这些控制器数组对象推送到另一个数组,因为我需要一个数组来将数据加载到多选中。 I.E.

StatesService.getAreaCities().then(function(response) {
   controller.cities = response.data.rows;

   controller.areaOptions.push(controller.cities);
});

StatesService.getAreaStates().then(function(response) {
   controller.states = response.data.rows;

   controller.areaOptions.push(controller.states);
});

controller.areaOptions = [];

这是我期望并需要我的数组对象的示例。 enter image description here

没有修改,这就是我的数组在推入的数组对象中的外观。enter image description here

如何获得上面的数据结构,如第一张图片,一个对象数组?我尝试了reduce()

的解决方案
var newCities = controller.cities.reduce(function(city){
    return controller.city;
}, {});

controller.areaOptions.push(newCities);

但它不是我想要的,因为它返回了一个具有所有城市属性及其所有值的单个对象。我需要每个对象包含城市及其价值。

修改

我找到了解决方案!感谢Lex。

我在每个服务中循环遍历数组中的每个对象并推送属性。 感谢所有人指导我正确的方向来解决这个问题,即使是那个贬低我的人:)

StatesService.getAreaCities().then(function(response) {
    controller.cities = response.data.rows;

    controller.cities.forEach(function(city){
       controller.areaOptions.push(city);
    });

});

1 个答案:

答案 0 :(得分:2)

看起来response.data.rows是一个数组。因此,当您push response.data.rows进入controller.areaOptions时,您将行数组添加为数组元素。 (基本上使它成为一个二维数组)

您应该使用Array.prototype.concat