Le groupement d'objets, par plusieurs colonnes avec Lodash ou un trait de Soulignement
J'ai de l'objet suivant records
:
{
"notes":[
{
"id":1,
"description":"hey",
"userId":2,
"replyToId":null,
"postId":2,
"parentId":null
},
{
"id":5,
"description":"hey test",
"userId":3,
"replyToId":null,
"postId":2,
"parentId":null
},
{
"id":2,
"description":"how are you",
"userId":null,
"replyToId":2,
"postId":2,
"parentId":null,
"user":null
}
]
}
Je veux de sortie:
2
object with id 1
object with id 2 (because replyToId value is same as userId
3
object with id 5
Donc, fondamentalement, je veux envisager d'utilisateur et le replyToId valeur sous le même groupe.
J'ai créer mon propre mixin sous lodash, emballage groupBy méthode:
mixin({
splitGroupBy: function(list, groupByIter){
if (_.isArray(groupByIter)) {
function groupBy(obj) {
return _.forEach(groupByIter, function (key){
if ( !!obj[key] ) return obj[key]
});
}
} else {
var groupBy = groupByIter;
}
debugger;
var groups = _.groupBy(list, groupBy);
return groups;
}
});
Appel ressemble à ceci:
_.splitGroupBy(data.notes,['userId', 'replyToId']);
La sortie est à venir sans groupe. Même quand j'ai essayé avec _.map
au lieu _.forEach
la scission ne s'est pas déroulée correctement.
Pouvez-vous refaire le "JSON" partie de votre question?
Comme une note: MDN: Conditionnellement la définition d'une fonction: Alors que
Il a été mis à jour maintenant.
Comme une note: MDN: Conditionnellement la définition d'une fonction: Alors que
[...]functions can be conditionally defined [...]
(depuis ES3), ils sont [...]no longer allowed in ES5 strict. Additionally, this feature does not work consistently cross-browser, so you should not rely on it.[...]
Il a été mis à jour maintenant.
OriginalL'auteur codebased | 2015-04-12
Vous devez vous connecter pour publier un commentaire.
Une solution à l'aide de soulignement:
Que fait totalement le truc 🙂
OriginalL'auteur Gruff Bunny
Ce qui peut probablement faire beaucoup plus joli, mais il devrait fonctionner:
OriginalL'auteur robertklep
En supposant
userId
etreplyToId
sont mutuellement exclusifs (c'est à dire soit vous avez unuserId
ou unreplyToId
, mais jamais les deux) comme ils le sont dans l'échantillon de données, puis en spécifiant une coutume fonction de groupement de travaux:OriginalL'auteur Retsam