2016-05-06 6 views
1

Ich habe ein Objekt-Array mit einem Objekt für jeden Tag (max 30). Jeder Tag hat Besprechungsdetails, die ich täglich zeigen möchte. Also, wie durchquere ich das Array, um eine Nachricht pro Tag auszuwählen und anzuzeigen?Wie zeige ich eine Nachricht pro Tag aus Objekt-Array

Das Objekt Array ist wie folgt:

{ 
    "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" 
    }] 
} 

Dank

+0

Was genau meinen Sie mit "durchlaufen durch das Array, um eine Nachricht pro Tag in der Reihenfolge auszuwählen und anzuzeigen". Versuchen Sie, den Artikel zu zeigen, der mit dem aktuellen Tag übereinstimmt? – ajmajmajma

+0

Entschuldigung, wenn nicht klar ... was ich meinte war, dass ich die relevanten Besprechungsdetails nur für diesen Tag anzeigen möchte, dann die nächsten Besprechungsdetails am nächsten Tag anzeigen usw. – GreenDome

+0

Sie haben also die aktuellen Monatsdaten und Sie wollen es um nur den aktuellen Tag anzuzeigen. Ist das eine ng-Wiederholung oder so? Wie werden sie auf dem Dom angezeigt? – ajmajmajma

Antwort

0

wenn ich das Problem richtig zu verstehen. dass Sie nur eine Nachricht pro Tag haben möchten, auch wenn mehrere im Array vorhanden sind. Der einfachste Weg wäre, sie in eine Karte umzuwandeln.

, wenn Sie die letzte Meldung für ein bestimmtes Datum zeigen wollen, dann tun dies

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

wenn Sie die erste Meldung für ein bestimmtes Datum zeigen wollen, dann müssen Sie nur eine if-Anweisung

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

Update: wenn Sie die Nachrichten erhalten möchten, können Sie eine Karte von Arrays verwenden

Sie können dann die siebte Nachricht finden (in der Reihenfolge ihres Auftretens in dem Array) für einen bestimmten Tag mit dem folgenden Code

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

Ja, ich denke, das Problem verstanden, aber ich bin mir nicht sicher, was "Karte konvertieren" bedeutet und wie würde ich zum Beispiel die 7. Sitzung an einem bestimmten Tag zeigen? – GreenDome

0

app.js (wo Ihre JSON-Datei meetings.json genannt wird)

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> 

ich hoffe, das ist das, was Sie gefragt.

+0

Nicht ganz, das würde durch die JSON-Datei gehen und alle Besprechungsdetails auf einmal anzeigen. – GreenDome

+0

Nun, statt ng-repeat könnten Sie

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

verwenden, um das Datum der X + 1-Besprechung anzuzeigen, wobei x von 0 aus beginnt. Sie können dasselbe für startTime, endTime, etc. –

+0

Können Sie mir bitte ein schnelles Spiel machen? Ich denke, ich verstehe dein Konzept, aber immer noch nicht sicher, wie ich die x + 1 jeden Tag erhöhen würde, um die nächsten Besprechungsdetails für den nächsten Tag zu zeigen. – GreenDome

Verwandte Themen