Underscore: (idée) Tableau unique d'objets par propriété

Créé le 10 déc. 2013  ·  3Commentaires  ·  Source: jashkenas/underscore

Je n'avais pas déjà vu cela dans le trait de soulignement, alors je voulais le jeter là-bas.

J'ai trouvé cela utile lorsque je fais des choses comme construire une liste de livres recommandés en fonction des livres qu'un utilisateur a consultés, aimés ou que ses amis ont aimés. Ensuite, montrez-leur une liste unique de recommandations probables.

function distinct(items, prop) {
    var unique = [];
    var distinctItems = [];

    _.each(items, function(item) {
        if (unique[item[prop]] === undefined) {
            distinctItems.push(item); 
        }

        unique[item[prop]] = 0;
    });

    return distinctItems;
}

// likedBooks + viewedBooks + friendLikedBooks + friendViewedBooks
var books = [
  { name: 'Holes', id: 1 },
  { name: 'Treasure Island', id: 2 },
  { name: 'Holes', id: 2 }
];

var uniqueBooks = distinct(books, 'id');
console.log(uniqueBooks);

/**
var uniqueBooks = [
  { name: 'Holes', id: 1 },
  { name: 'Treasure Island', id: 2 }
];
*/

J'adorerais trouver un PR plus approprié, mais je voulais d'abord voir ce que les gens pensaient.

question

Commentaire le plus utile

Vous pouvez accomplir cela avec ce qui suit, bien que vous ne puissiez pas utiliser le raccourci du nom de propriété.

_.uniq(books, function(book) { return book.id; })

Tous les 3 commentaires

Vous pouvez accomplir cela avec ce qui suit, bien que vous ne puissiez pas utiliser le raccourci du nom de propriété.

_.uniq(books, function(book) { return book.id; })

Ty @braddunbar Je ne pensais pas que je pouvais faire ça à partir des documents. Ce serait vraiment utile comme deuxième exemple.
http://underscorejs.org/#uniq

La nouvelle méthode _.property devrait être en mesure de résoudre ce cas d'utilisation assez bien.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

githublyp picture githublyp  ·  3Commentaires

marcalj picture marcalj  ·  5Commentaires

jezen picture jezen  ·  8Commentaires

afranioce picture afranioce  ·  8Commentaires

sky0014 picture sky0014  ·  8Commentaires