【问题标题】:how to show one message per day from object array如何从对象数组中每天显示一条消息
【发布时间】:2016-05-06 18:41:10
【问题描述】:

我有一个对象数组,每天有一个对象(最多 30 个)。每天都有会议详细信息,我想每天显示。因此,如何遍历数组以每天按顺序选择并显示一条消息?

对象数组如下:

{
  "meetings": [{
    "date": "07/06/2016",
    "startTime": "15.00",
    "finishTime": "16.00",
    "subject": "local community"
  }, {
    "date": "08/06/2016",
    "startTime": "12.00",
    "finishTime": "12.30",
    "subject": "environment"
  }, {
    "date": "09/06/2016",
    "startTime": "12.00",
    "finishTime": "13.00",
    "subject": "local community"
  }]
}

谢谢

【问题讨论】:

  • “遍历数组以每天按顺序选择并显示一条消息”到底是什么意思。您是否要显示与当天一致的项目?
  • 对不起,如果不清楚...我的意思是我想只显示当天的相关会议详细信息,然后在第二天显示下一次会议的详细信息等。
  • 所以你有当前月份的数据,你希望它只显示当天。这是一个 ng-repeat 还是什么?它们是如何显示在 dom 上的?
  • 数据不一定是当前月份,即我可以拥有 6 月份的所有会议详细信息,我想从明天开始显示,但每天只有一次会议。

标签: arrays angularjs javascript-objects


【解决方案1】:

app.js(您的 JSON 文件称为 meeting.json)

var app = angular.module('Meetings', []);

app.factory('meetings', ['$http', function($http) {
  return $http.get('meetings.json')
         .success(function(data) {
           return data;
         })
         .error(function(data) {
          console.log("error");
           return data;

         });
}]);


app.controller('HomeController', ['$scope', 'meetings', function($scope, meetings) { 
  meetings.success(function(data){
    $scope.meeting = data;
});
}]);

index.html

<div ng-repeat="day in meeting.meetings">
  <p>{{day.date}}</p>
  <p>{{day.startTime}}</p>
  <p>{{day.finishTime}}</p>
  <p>{{day.subject}}</p>
</div>

我希望这是你所要求的。

【讨论】:

  • 不完全是,这将遍历 JSON 文件并一次性显示所有会议详细信息。
  • 好吧,你可以使用

    {{meeting.meetings[x].date}}

    代替 ng-repeat 来显示 X+1 会议的日期,其中 x 开始于0. startTime、finishTime等也可以这样做
  • 你能帮我做一个快速的jsfiddle吗?我想我理解您的概念,但仍然不确定如何每天增加 x+1 以显示第二天的下一次会议详细信息。
【解决方案2】:

如果我正确理解了问题。即使数组中有多条消息,您也希望每天只收到一条消息。最简单的方法是将其转换为地图。

如果您想显示给定日期的最后一条消息,请执行此操作

var data = { "meetings" : [...]};
var messages = {};
for(var message of data.meetings) {
  messages[message.date] = message;
}

如果你想显示给定日期的第一条消息,那么你只需要添加一个 if 语句

var data = { "meetings" : [...]};
var messages = {};
for(var message of data.meetings) {
  if(!messages[message.date]) {
    messages[message.date] = message;
  }
}

更新: 如果要保留消息,可以使用数组映射

var data = { "meetings" : [...]};
var messages = {};
for(var message of data.meetings) {
  if(!messages[message.date]) {
    messages[message.date] = [];
  }
  messages[message.date].push(message);
}

然后您可以使用以下代码找到特定日期的第 7 条消息(按在数组中出现的顺序)

var message = messages["01/01/2012"][6];

【讨论】:

  • 是的,我认为我理解了这个问题,但我不确定“转换为地图”是什么意思,我将如何展示特定日期的第 7 次会议?
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多