Trouver le nombre d'occurences de la chaîne des éléments dans un Tableau à l'aide de lodash ou un trait de soulignement js
J'ai un tableau dans le format suivant:
var array = [
{ id: '555weibo' },
{ id: '578weibo' },
{ id: '111facebook' },
{ id: '123facebook' },
{ id: '145facebookpage' },
{ id: '145facebookpage' },
{ id: '766facebook' },
{ id: '242facebook' },
{ id: '432twitter' },
{ id: '432exing' }
];
J'ai besoin de trouver le nombre d'occurrences de facebook
, twitter
, xing
, et weibo
à l'intérieur de ce tableau.
par exemple:
{
weibo: 2,
facebook: 6,
twitter: 1,
xing: 1
}
J'ai cherché une solution, mais rien ne semble fonctionner.
Le code suivant ne donne pas le résultat attendu. Votre aide est très appréciée. Je vous remercie.
var filtered = _.map(diff, function(value, key) {
return { id: key, count:value };
});
Vous devez vous connecter pour publier un commentaire.
Avec l'aide de trait de soulignement:
array
est prise à partir de la question.Voici comment vous pouvez le faire en utilisant lodash:
map()
et ainsi de suite. Il prend un nombre arbitraire de fonctions comme arguments. L'entrée est filtrée à travers chacune de ces fonctions, et le résultat est retourné. C'est un moyen puissant pour composer des rappels car il est facile de réorganiser/ajouter/supprimer des parties.method()
est en train de faire la même chose ici, sauf que c'est en supprimantpage
à partir de la fin de la chaîne. Remarquez comment il n'y a pasid
préfixe car il transmis le résultat de la fonction, en face de lui.Vous devez spécifier les clés possibles car il n'y a aucun moyen de deviner dans la table initiale.
Voici une solution, vous n'avez pas besoin de la bibliothèque:
Démonstration
(item.id.indexOf(key) >= 0) && collector[key]++;
est lisible pour tout le monde 🙂var ret = {facebook: 0, weibo: 0, twitter: 0, xing: 0}; _.reduce(array, function(result, val) { _.forEach(result, function(v, key){ if(val.id.indexOf(key) > 0) result[key]++; }); return result; }, ret);