lodash uniq — выберите, какой дубликат объекта сохранить в массиве объектов

есть ли способ указать, какой элемент массива сохранить на основе непустого ключа. кажется, что uniq просто сохраняет первое вхождение.

e.g:

var fruits = [
{'fruit': 'apples', 'location': '', 'quality': 'bad'}, 
{'fruit': 'apples', 'location': 'kitchen', 'quality': 'good'}, 
{'fruit': 'pears', 'location': 'kitchen', 'quality': 'excellent'}, 
{'fruit': 'oranges', 'location': 'kitchen', 'quality': ''}
];


console.log(_.uniq(fruits, 'fruit'));


/* output is:

Object { fruit="apples",  quality="bad",  location=""}
Object { fruit="pears",  location="kitchen",  quality="excellent"}
Object { fruit="oranges",  location="kitchen",  quality=""}

*/

Есть ли способ сказать lodash uniq выбрать дубликат со значением местоположения? Это сохранение плохих яблок вместо хороших.

~~~

Мое окончательное решение заключалось в использовании sortByOrder внутри uniq.

console.log(_.uniq(_.sortByOrder(fruits, ['fruit','location'], ['asc','desc']),'fruit'))

привело к:

Object { fruit="apples",  location="kitchen",  quality="good"}
Object { fruit="oranges",  location="kitchen",  quality=""}
Object { fruit="pears",  location="kitchen",  quality="excellent"}

person John Paul Vaughan    schedule 08.01.2016    source источник


Ответы (1)


Из того, что я вижу в документах по адресу https://lodash.com/docs#uniq, нет способа укажите это. Вероятно, что вы хотите сделать, это группа по фруктам, а затем вы можете выбрать, какое качество вам нужно. Это зависит от контекста и того, зачем вам это нужно.

Можете ли вы объяснить свою проблему немного больше?

person Nicolas Azrak    schedule 09.01.2016
comment
Спасибо, NicoAzrak, это предложение помогло мне разобраться. вот что я сделал: console.log(.uniq(.sortByOrder(fruits, ['fruit','location'], ['asc','desc']),'fruit') ) - person John Paul Vaughan; 09.01.2016
comment
Что, если одним из свойств является временная метка, будет ли сортировка работать правильно? - person Madhumita Chowdhury; 10.10.2016