2015-11-18 4 views
0

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

[{ "name": "Jen", "age":31, "eyecolor": "blue", "hair":"brown"}, 
{ "name": "Jen", "age":32, "eyecolor": "green", "hair":"blonde"}, 
{ "name": "Jules", "age":31, "eyecolor": "blue", "hair":"brown"}, , 
{ "name": "Brian", "age":40, "eyecolor": "blue", "hair":"brown"}] 

Мне нужно выражение lodash, что приведет к массиву уникальных объектов на основе одного свойства. Например, если бы я использовал имя, это дало бы мне эти три:

[{ "name": "Jen", "age":31, "eyecolor": "blue", "hair":"brown"}, 
{ "name": "Jules", "age":31, "eyecolor": "blue", "hair":"brown"}, 
{ "name": "Brian", "age":40, "eyecolor": "blue", "hair":"brown"}] 

ответ

2

Для версий Lodash 4+ использовать _.uniqBy():

var arr = [{"name":"Jen","age":31,"eyecolor":"blue","hair":"brown"},{"name":"Jen","age":32,"eyecolor":"green","hair":"blonde"},{"name":"Jules","age":31,"eyecolor":"blue","hair":"brown"},{"name":"Brian","age":40,"eyecolor":"blue","hair":"brown"}]; 
 

 
var unique = _.uniqBy(arr, 'name'); 
 

 
console.log(unique);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

Для версий Lodash под 4 использования _.uniq() :

var arr = [{"name":"Jen","age":31,"eyecolor":"blue","hair":"brown"},{"name":"Jen","age":32,"eyecolor":"green","hair":"blonde"},{"name":"Jules","age":31,"eyecolor":"blue","hair":"brown"},{"name":"Brian","age":40,"eyecolor":"blue","hair":"brown"}]; 
 

 
var unique = _.uniq(arr, 'name'); 
 

 
console.log(unique);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>

+0

его не дает ожидаемого ответа. Тем не менее я получаю все 4 элемента. – saurabh

+0

Это старый ответ, который использует lodash 3. Если вы используете более новую версию lodash, используйте _.uniqBy(). Обновлен ответ на примере. –

0

Если ваша версия lodash выше 4.0, вы должны использовать _.uniqBy().

В настоящее время _.uniq() не работает, он принимает только один параметр, который не может адресовать итерированные объекты.

var arr = [{ "name": "Jen", "age":31, "eyecolor": "blue", "hair":"brown"}, 
 
{ "name": "Jen", "age":32, "eyecolor": "green", "hair":"blonde"}, 
 
{ "name": "Jules", "age":31, "eyecolor": "blue", "hair":"brown"}, 
 
{ "name": "Brian", "age":40, "eyecolor": "blue", "hair":"brown"}]; 
 

 
var result = _.uniqBy(arr, 'name'); 
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Ссылка
https://lodash.com/docs/4.17.4#uniqBy

Смежные вопросы