我有一个对象数组。每个对象都有一个日期键,在某些情况下,它在不同对象中是相同的值。我试图打印日期只有一次为所有这些对象具有相同的日期。(我使用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
}
}
})
可以使用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>
这可能看起来像你想要一个映射,但由于您正在寻找组合记录,而不是创建一个具有相同数量记录的新数组,映射将无法工作。
不清楚如何从数组移动到输出,因此这仅仅是一个建议:
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
,其中每天有一个键。每个day对象都有一个活动数组,其中包含当天的活动。如果您想获得在控制台中显示的准确输出,可以这样做:
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'));
}