Javascript 如何分组阵列&;物体?

Javascript 如何分组阵列&;物体?,javascript,angularjs,underscore.js,Javascript,Angularjs,Underscore.js,我有一个包含3个对象的数组,但是第二个对象在“数据”对象中没有数组 我需要以正确的顺序为每个“艺术家”重复ng,但是第二个对象会引起问题。如何将每个对象组合在一起 在我的工厂中,我设置了一个调用来接收来自三个不同API的三个响应。我为每个人都设定了一个承诺,这样他们就会按照我所说的顺序来 工厂 .factory('timeline', function($http, $q) { var promise1 = $http({ method: "GET",

我有一个包含3个对象的数组,但是第二个对象在“数据”对象中没有数组

我需要以正确的顺序为每个“艺术家”重复ng,但是第二个对象会引起问题。如何将每个对象组合在一起

在我的工厂中,我设置了一个调用来接收来自三个不同API的三个响应。我为每个人都设定了一个承诺,这样他们就会按照我所说的顺序来

工厂

.factory('timeline', function($http, $q) {    

    var promise1 = $http({
        method: "GET",
        url: "http://api.example.com/last/3/?limit=3"
    });
    var promise2 = $http({
        method: "GET",
        url: "http://api.example.com/current/3/"
    });
    var promise3 = $http({
        method: "GET",
        url: "http://api.example.com/next/3/?limit=3"
    });

    return {
       data: $q.all([promise1, promise2, promise3])
    }

})
在我的控制器中,我得到这样的响应

[
Object
   config 
   data: [Array 3]
     -0: Object 
         artist : 'Artist'
         title  : 'Title'
     -1: Object
     -2: Object
,

Object
   config 
   data: Object
     artist : 'Artist'
     title  : 'Title
,

Object
   config 
   data: [Array 3]
     -0: Object 
         artist : 'Artist'
         title  : 'Title'
     -1: Object
     -2: Object
]
控制器

我尝试使用下划线进行筛选

.controller('StationCtrl', function($scope, $stateParams, $http, timeline) {

timeline.data.then(function(musicData) {
    var row = [];
    for (var i = 0; i < musicData.length; i++) {
        var data = _.filter(musicData[i].data, function(x){
            row.push(x);
        })         
    }       
})
})

我仍在尝试如何使用对象和数组,任何帮助/提示都将非常有用。

理想情况下,我认为您应该只为第二个对象发送一个数组,其长度为1。如果API不在您的控制范围内,即第三方或任何其他方面,那么我们可以期待以其他方式解决问题。

这是一种简单的方法,可以帮助您解决问题,而无需下划线。您只需要检查数据是对象还是数组

var arr = [
  { data: [{ artist: 'Artist' }, { artist: 'Artist2' }]},
  { data: { artist: 'Artist3' } },
  { data: [{ artist: 'Artist4' }]}
];

var flattened = [];

arr.forEach(function (el) {
  if(Array.isArray(el.data)) {
    flattened = flattened.concat(el.data);
  } else {
    flattened.push(el.data);
  }
});

请参见上的示例。

您可以去掉下划线,只需对以下内容执行嵌套操作:

.controller('StationCtrl', function($scope, $stateParams, $http, timeline) {

timeline.data.then(function(musicData) {
    var row = [];
    var dataElement;
    var i;
    var j;
    for (i = 0; i < musicData.length; i++) {
        dataElement = musicData[i].data;
        if(typeof dataElement === 'object') {
            row.push(dataElement)
        } else if(typeof dataElement === 'array') {
            for(j = 0; j < dataElement.length; j++) {
                row.push(dataElement[j]);
            }
        }        
    }       
})
})
.controller('StationCtrl',函数($scope、$stateparms、$http、timeline){
timeline.data.then(函数(musicData){
var行=[];
var数据元;
var i;
var j;
对于(i=0;i
是的,API不是我的控制权,让我看看我现在是否可以这样做。您也可以实施另一种方法,即在设置范围内的数据之前,对其进行操作并进行更新。您想如何将配置对象合并为一个?抱歉,已删除此项,实际上不想合并配置,只需数据谢谢!我需要学习Array.isArray,以前从未使用过
.controller('StationCtrl', function($scope, $stateParams, $http, timeline) {

timeline.data.then(function(musicData) {
    var row = [];
    var dataElement;
    var i;
    var j;
    for (i = 0; i < musicData.length; i++) {
        dataElement = musicData[i].data;
        if(typeof dataElement === 'object') {
            row.push(dataElement)
        } else if(typeof dataElement === 'array') {
            for(j = 0; j < dataElement.length; j++) {
                row.push(dataElement[j]);
            }
        }        
    }       
})
})