私はこのStackの質問 "Underscore with Underscore with Javascript" を見てきましたが、それはまさに私がやろうとしていることですが、どの例も機能しません。実際、_。uniqで動作するイテレータ関数を取得できません。
_.uniq([1, 2, 1, 3, 1, 4]);
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return a===4;});
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], true, function(a){ return a===4;});
> [1, 2, 1, 3, 1, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return false;});
> [1, 2, 3, 4]
_.uniq([1, 2, 1, 3, 1, 4], false, function(a){ return true;});
> [1, 2, 3, 4]
var people = [ { name: 'John', age: 20 }, { name: 'Mary', age: 31 }, { name: 'Kevin', age: 20 }];
_.uniq(people, false, function(p){ return p.age; });
> [ { age: 20, name: "John" },
{ age: 31, name: "Mary" },
{ age: 20, name: "Kevin" } ]
私はします:
_.uniq(_.map(people, function(p){ return p.age; }));
> [20, 31]
ただし、元のオブジェクトではなく、マップされた値のみを返します。
助けてくれてありがとう。下線バージョン1.1.7を使用しています
_.uniqの比較関数は1.2.0で導入されたようです。
changelog から:
_.uniqにオプションのイテレータを渡して、オブジェクトが一意であると見なす必要がある基準を決定できるようになりました。
私も同じ問題を抱えていました。これは、_。uniq()returnsが新しい縮小配列であるために発生し、変数に割り当てる必要があります。したがって、このわずかな修正で機能する必要があります。
var people = [{name: 'John'、age:20}、{name: 'Mary'、age:31}、{name: 'Kevin'、age:20}];
people = _.uniq(people、false、function(p){return p.age;});
[{年齢:20、名前: "ジョン"}、{年齢:31、名前: "メアリー"}]