_.uniqBy(data, _.findKey);
Объяснение:
В _.uniqueBy()
вам нужно указать, по какому значению вы хотите получить уникальность, либо вы передаете строку как атрибут (значение этого атрибута будет использоваться для определения уникальности), или вы передаете обратный вызов, который вернет значение, и это значение будет считаться для оценки уникальности. В случае, если значение, по которому мы определим уникальность, является простым и нативным значением, _.uniqueBy()
является лучшим выбором, поэтому вам не нужно сравнивать вручную (что вам нужно сделать, если ваше значение является сложным объектом и по У многих ключей уникальность определяется). В нашем случае это просто object key
, который может быть либо string
, либо symbol
. Таким образом, часть капризона мы можем допустить на lodash
с _uniqueBy
В нашем случае, если мы может вернуть единственный ключ (это должен быть ровно 1, иначе ни один из лог c не будет работать) каждого объекта, _.uniqueBy()
может сделать дальше, поэтому в основном наша цель - передать обратный вызов, который вернет единственный ключ , мы можем просто передать обратный вызов для оценки этого, например: e => _.keys(e)[0]
Теперь _.findkey
принимает объект в качестве первого аргумента и достоверность возвращаемого значения, если это правда, тогда он вернет этот ключ ( в отличие от возврата этой сущности, такой как _.find
), поэтому, если вы не передадите обратный вызов, для обработки этого случая автоматически присваивается обратный вызов по умолчанию со значением a => a
. это означает, что он будет проверять истинность каждой сущности (в данном случае ключ), и, очевидно, ключ должен быть истинным значением, поэтому он будет возвращать саму первую сущность (здесь первый ключ для _.findKey
), следовательно, передавая Обтекание обратного вызова findKey только с одним аргументом, таким как a => _.findKey(a)
эквивалентно передаче обратного вызова _.findKey
, мы можем сделать его более простым, и _.uniqueBy(data, _.findKey)
сделает эту работу.
Давайте получим фрагмент:
let data=[{key1:"sometext"},{key2:"sometext"},{key1:"sometext"},{key3:"sometext"}];
let res = _.uniqBy(data, _.findKey);
console.log('Unique Result: ', res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>