Quelle est la manière élégante d'obtenir la plus récente date de tableau d'objets à côté client?
- Je utiliser angularjs dans le projet.
Je reçois tableau d'objets à partir du serveur.
Chaque objet contient quelques propriétés et l'un d'eux est la date de la propriété.
Voici le Tableau (en json) que je reçois de serveur:
[
{
"Address": 25,
"AlertType": 1,
"Area": "North",
"MeasureDate": "2019-02-01T00:01:01.001Z",
"MeasureValue": -1
},
{
"Address": 26,
"AlertType": 1,
"Area": "West",
"MeasureDate": "2016-04-12T15:13:11.733Z",
"MeasureValue": -1
},
{
"Address": 25,
"AlertType": 1,
"Area": "North",
"MeasureDate": "2017-02-01T00:01:01.001Z",
"MeasureValue": -1
}
.
.
.
]
J'ai besoin d'obtenir la plus récente date de la matrice.
Quelle est la manière élégante d'obtenir la plus récente date de tableau d'objets?
Boucle de fil et de trouver la date la plus récente.
dois-je les convertir en Date objet javascript.
Oui, vous devez convertir la chaîne de caractères à une date.
Vous n'avez pas besoin de le convertir. Il peut être commandé en est. Et, en fait, il y a quelques arguments à-dire l'introduction de conversion ouvre la parole pour introduire plus de potentiel pour des problèmes apparaissent (l'analyse etc.).
Vous n'avez pas à convertir à cause du format spécifique que vous avez choisi. Je dirais que c'est mieux de le convertir, mais, depuis si votre demande jamais utilise un format différent ou accepte plusieurs formats, alors que cela pourrait briser alors que l'analyse comme une date et puis, ordonnant assure que c'est vraiment la dernière date (qui peut ne pas nécessairement être la dernière commande de la chaîne). Par exemple, si vous commencez à accepter MM/JJ/AAAA dates, puis de la chaîne de commande pourrait être radicalement différente de la date de la commande.
dois-je les convertir en Date objet javascript.
Oui, vous devez convertir la chaîne de caractères à une date.
Vous n'avez pas besoin de le convertir. Il peut être commandé en est. Et, en fait, il y a quelques arguments à-dire l'introduction de conversion ouvre la parole pour introduire plus de potentiel pour des problèmes apparaissent (l'analyse etc.).
Vous n'avez pas à convertir à cause du format spécifique que vous avez choisi. Je dirais que c'est mieux de le convertir, mais, depuis si votre demande jamais utilise un format différent ou accepte plusieurs formats, alors que cela pourrait briser alors que l'analyse comme une date et puis, ordonnant assure que c'est vraiment la dernière date (qui peut ne pas nécessairement être la dernière commande de la chaîne). Par exemple, si vous commencez à accepter MM/JJ/AAAA dates, puis de la chaîne de commande pourrait être radicalement différente de la date de la commande.
OriginalL'auteur Michael | 2016-04-12
Vous devez vous connecter pour publier un commentaire.
Propre façon de le faire serait de convertir chaque jour à un
Date()
et prendre le maxoù
a
est le tableau d'objets.Ce que cela fait, c'est une carte de chacun des objets dans le tableau à une date de création de la valeur de
MeasureDate
. Cette mappé tableau est ensuite appliqué à laMath.max
fonction pour obtenir la dernière date et le résultat est converti en un jour.Par la cartographie de la chaîne de dates JS Date d'objets, vous vous retrouvez à l'aide d'une solution comme Min/Max de dates dans un tableau?
--
Un moins propre solution serait tout simplement de la carte les objets à la valeur de
MeasureDate
et trier le tableau de chaînes de caractères. Cela ne fonctionne que parce que de la date particulière de format que vous utilisez.Si la performance est une préoccupation, vous pouvez
reduce
le tableau pour obtenir le maximum au lieu d'utilisersort
etreverse
.ES6: new Date(Math.max(...un.carte(a=> new Date(un.MeasureDate))));
Comment aurais-je obtenir l'ensemble de l'objet au lieu de simplement la date?
Il y a probablement un moyen plus facile de le faire, mais j'ai dû écrire une autre fonction pour obtenir l'objet: Si votre fonction donne une Date, et disons que attribuée à la var
mostRecentDate
. Alors je peux faire pour obtenir l'objet:var mostRecentObject = a.filter( e => { var d = new Date( e.MeasureDate ); return d.getTime() == mostRecentDate.getTime();})[0];
OriginalL'auteur arcyqwerty
Modification Anton Harald réponse: Le tableau que j'ai utilise ModDate au lieu de MeasureDate. J'ai choisi la date la plus récente. Les travaux de cette.
m = accumulateur, v =, i = indice de
Environnement: Tapuscrit, ES6
xs
doit être un tableau. Dans mon cas particulier, j'ai eu un dictionnaire avec des objets de valeurs, j'ai donc été en mesure de l'utiliser avecObject.values(myDict).reduce(...)
OriginalL'auteur Larry Popiel
Cette fonction renvoie la date la plus récente comme un Objet date JavaScript. Vous pouvez aussi le transformer en un ISO-Chaîne (le format de votre source de données) avec la Date-méthode de l'Objet toISOString().
Comme vous pouvez le voir, le résultat de la méthode inclut toujours à zéro millisecondes à la fin. Si vous avez besoin de votre ISO originale de données chaîne de caractères comme un résultat, vous pouvez aller avec la fonction suivante:
OriginalL'auteur Anton Harald
Si vous voulez obtenir l'Objet entier, pas seulement la date...
Donc si OP tableau d'Objets a été attribué à
a
c'est comment vous obtenez l'Objet le plus récentMeasureDate
:Remarque: Cette solution est une extension de @archyqwerty la réponse ci-dessus. Leur solution a donné seulement la date la plus récente à partir d'un tableau d'objets, cette solution vous donne l'ensemble de l'Objet que la date a été membre de.
OriginalL'auteur Travis Heeter
Inspiré par un grand nombre de suggestions et de commentaires dans ce fil, voici une autre solution pour le problème. C'est très rapide, car il n'y a pas de date objet de la conversion.
Voici une version pour Navigateur ne supportant pas la flèche fonctions:
Quel navigateur utilisez-vous? peut-être qu'il ne prend pas en charge flèche fonctions jet. Voir plus de détails ici: developer.mozilla.org/de/docs/Web/JavaScript/Reference/...
ajout d'un < es6 version
OriginalL'auteur Anton Harald