Ответ 1
Похоже, что функции сравнения для _.uniq были введены в 1.2.0
из changelog:
_. uniq теперь может быть передан необязательный итератор, чтобы определить, по каким критериям объект должен считаться уникальным.
Я просмотрел этот вопрос в стеке, "Удаление дубликатов объектов с помощью Underscore для 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() возвращает новый уменьшенный массив, поэтому вам нужно передать его переменной. Поэтому с этой небольшой коррекцией он должен работать.
var people = [{name: 'John', age: 20}, {name: 'Mary', age: 31}, {name: 'Kevin', age: 20}];
people = _.uniq(люди, false, function (p) {return p.age;});
[{age: 20, name: "John" }, {age: 31, имя: "Mary" }]