J'utilise _underscore.js pour trouver tous les éléments uniques dans un tableau, mais je ne sais pas comment obtenir également le nombre d'éléments uniques retournés.
_PERSONARRAY = [{name:"tom",age:7}{name:"john",age:9}{name:"becky",age:2}{name:"sam",age:7}]
_UNIQUEAGEARRAY = _.chain(_PERSONARRAY).map(function(person) { return person.age }).uniq().value();
Dans ce cas, _UNIQUEAGEARRAY sera égal à:
[7,9,2]
Ce dont j'ai réellement besoin est quelque chose comme:
[{uniqueAge:7,numberOfPeople:2}{uniqueAge:9,numberOfPeople:1}{uniqueAge:2,numberOfPeople:1}]
Merci pour l'aide. Aussi, je suppose que _underscore.js est rapide à faire cela ?? Si c'est stupide et lent, dites-le-moi, car je serais ouvert à d'autres solutions.
Je pense que vous recherchez la fonction countBy
:
_UNIQUEAGEARRAY = _.countBy(_PERSONARRAY, "age");
Il produit le résultat:
{"2":1,"7":2,"9":1}
Démo JSFiddle: http://jsfiddle.net/4J2SX/
Une bonne solution consiste à utiliser la fonction d'itérateur facultative pour souligner la fonction uniq
:
let people = [
{name: "Alice", age: 21},
{name: "Bob", age: 34},
{name: "Caroline", age: 21}
];
_.uniq(people, person => person.age);
Documents: http://underscorejs.org/#uniq
Vous pouvez utiliser le groupe de soulignement si vous le souhaitez (ce n'est peut-être pas une bonne idée pour un grand ensemble de données car il conserve une liste de tous les éléments groupés)
Exemple:
var d = _.groupBy(_PERSONARRAY, function(p){
return p.age;
});
Si vous voulez mapper cela à votre format exact, essayez de faire une carte après le groupe
var x = _.map(d, function(people, age) {
return {uniqueAge: age, numberOfPeople: people.length};
});
jsFiddle: http://jsfiddle.net/jsgkC/2/
La fonction groupBy
est utile.
_personsList = [{name:"anjo",age:5},{name:"george",age:3},{name:"jack",age:5}];
_uniqAgeList = _.groupBy(_personsList, "age");
produira une sortie
{
"3":[{"name":"george","age":3}],
"5":[{"name":"anjo","age":5},{"name":"jack","age":5}]
}
jsfiddle: http://jsfiddle.net/4J2SX/199/