Карта Лодаша и уникальная обратная связь

У меня есть переменная lodash;

var usernames = _.map(data, 'usernames');

который производит следующее:

[
    "joebloggs",
    "joebloggs",
    "simongarfunkel",
    "chrispine",
    "billgates",
    "billgates"
]

Как я могу настроить оператор lodash так, чтобы он возвращал только массив уникальных значений? например.

var username = _.map(data, 'usernames').uniq();

Ответ 1

Многие способы, но uniq() не метод в массиве, это метод lodash.

_.uniq(_.map(data, 'usernames'))

Или:

_.chain(data).map('usernames').uniq().value()

(Вторая непроверенная и, возможно, неправильная, но она закрывается.)

Как упоминалось в комментарии, в зависимости от ваших данных на самом деле, вы можете сделать это всего одним выстрелом, не вытащив из него все usernames.

Ответ 2

Вы также можете использовать функцию uniqBy которая также принимает iteratee, вызываемого для каждого элемента в массиве. Он принимает два аргумента, как показано ниже, где id - это параметр iteratee.

_.uniqBy(array, 'id')