在javascript的.map()方法中使用迭代器和if语句

Use iterator and if-statement in a .map( ) method in javascript

本文关键字:迭代器 语句 if 方法 javascript map      更新时间:2023-09-26

我有一个对象数组。每个对象都有一个日期键,在某些情况下,它在不同对象中是相同的值。我试图打印日期只有一次为所有这些对象具有相同的日期。(我使用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'));
}