我有一个包含3个对象的数组,但 第二个 对象在' Data '对象中没有数组。
我需要以正确的顺序对每个'艺术家'进行ng-repeat,但是第二个对象会导致问题。我如何将每个对象组合在一起?
在我的工厂,我设置了一个电话,接收来自三个不同API的三个响应。我为每个人设定了一个承诺,所以他们按照我称之为的确切顺序。
FACTORY
.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
我尝试使用下划线进行过滤。
.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);
})
}
})
})
我的目标 ,如果可能的话,最终会按顺序组合所有内容
Object
data: [Array 7]
-0: Object
-1: Object
-2: Object
-3: Object
-4: Object
-5: Object
-6: Object
,
我仍然在试图弄清楚如何使用Objects&amp;数组,任何帮助/技巧都会很棒。
答案 0 :(得分:1)
理想情况下,我认为你应该只为第二个对象发送一个长度为1的数组。如果API不在你的控制之下,即第三方或其他任何东西,那么我们可以期待以其他方式解决问题。 / p>
答案 1 :(得分:1)
这是一种简单的方法,可以在没有下划线的情况下解决问题。您只需要检查您的数据是对象还是数组。
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);
}
});
请参阅jsbin上的示例。
答案 2 :(得分:0)
你可以去掉下划线,只做一个嵌套:
.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]);
}
}
}
})
})