我有一个对象数组。每个对象都有一个日期键,在某些情况下,它们在不同的对象中是相同的值。我试图只为具有相同日期的所有对象打印一次日期。 (我使用angular作为框架)这里是数组:
[
{
date:"07/02/2015",
time: "03:00 PM"
activity: "gym"
}
{
date:"07/02/2015",
time: "08:30 AM"
activity: "gym"
}
{
date:"10/25/2015",
time: "06:00 PM"
activity: "yoga"
}
]
浏览器中的预期结果:
On 07/02/2015 you have,
gym at 03:00 PM
yoga at 08:30 AM
On 10/25/2015 you have,
yoga at 06:00 PM
以下是我认为可行的代码,但它没有:
$scope.Activitylist = data.map(function(oneActivity, index){
if($scope.Activitylist[index].date === $scope.Activitylist[index+1].date){
return {
time: oneActivity.time,
activity: oneActivity.activity
}
}
else{
return{
date: oneActivity.date,
time: oneActivity.time,
activity: oneActivity.activity
}
}
})
答案 0 :(得分:2)
您可以使用unique
预定义过滤器。您的HTML结构将类似于
<div class="list" ng-repeat="oneActivity in Activitylist | unique:'date'">
<div class="Date">{{oneActivity.date}}</div>
<div class="Time">{{oneActivity.time}}</div>
<div class="Amount">{{oneActivity.avtivity}}</div>
</div>
答案 1 :(得分:1)
您可能看起来想要一张地图,但由于您希望合并记录而不是创建具有相同记录数的新数组,因此地图将无效。
目前还不清楚你是如何从阵列转移到输出的,所以这只是一个建议:
var result = {};
data.forEach(function(i) {
if (i.date in result) {
result[i.date].activities.push(i);
} else {
result[i.date] = {};
result[i.date].activities = [i];
}
});
这将创建一个对象result
,每天都有一个键。这些日期对象中的每一个都将有一个活动数组,其中包含当天的活动。如果你想获得你在控制台中显示的输出,你可以这样做:
for(key in result) {
console.log('On ' + key + 'you have, \n', result[key].activities.map(function(i) { return ' ' + i.activity + ' at ' + i.time; }).join('\n'));
}