如何从集合中查找不同值的数量

Jea*_*ois 4 backbone.js

假设我有一个像这样的集合:

  {
     "id": 1,
     "name": "jonas",
  },
  {
     "id": 2,
     "name": "jonas",
  },
  {
     "id":3,
     "name": "smirk",
  }
Run Code Online (Sandbox Code Playgroud)

如何得到 :

不同名称的数量,如本例中的2

不同的名字,在这种情况下,jonas和smirk?

nik*_*shr 12

使用一些Backbone和Underscore魔法,组合collection.pluck_.uniq:

pluck collection.pluck(attribute)
从集合中的每个模型中获取属性.等效于调用map,并从迭代器返回单个属性.

uniq _.uniq(array,[isSorted],[iterator])
使用===生成数组的无副本版本,以测试对象相等性.
[...]

var c = new Backbone.Collection([
    {id: 1, name: "jonas"},
    {id: 2, name: "jonas"},
    {id: 3, name: "smirk"}
]);

var names = _.uniq(c.pluck('name'));
console.log(names.length);
console.log(names);
Run Code Online (Sandbox Code Playgroud)

和演示http://jsfiddle.net/nikoshr/PSFXg/