2015-07-13 5 views
2

У меня есть 2 массива объектов. Между массивами есть дубликаты. Я хочу объединить их в один массив из всех уникальных объектов (так что дубликатов нет).Underscore.js получить массив уникальных объектов

Как это сделать, сравнивая «id» каждого объекта?

У undderscore.js есть метод под названием _.uniq(). Это выглядит правильно, но я не могу получить синтаксис правильного аргумента «итератор».

var firstArray = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }]; 
var secondArray = [{ id: 2, name: "boop" }, { id: 3, name: "baz" }]; 

firstArray.push(secondArray); 
var myUniqueArray = _.uniq(firstArray, false, ???); 

myUniqueArray // [{ id: 1, name: "foo"}, { id: 2, name: "bar" }, { id: 3, name: "baz" }]; 
+0

[Это может помочь] (http://stackoverflow.com/questions/1584370/how-to-merge-two-arrays-in-javascript-and-de-duplicate-items), и вам действительно не нужно используйте внешнюю библиотеку. – ODelibalta

ответ

2

Вы должны быть в состоянии добиться этого _.uniq метод, используемый вторым параметром имя свойства, которые будут использоваться для фильтрации элементов:

var firstArray = [{ id: 1, name: "foo"}, { id: 2, name: "bar" }]; 
 
var secondArray = [{ id: 2, name: "boop" }, { id: 3, name: "baz" }]; 
 

 
var result = _.uniq(firstArray.concat(secondArray), 'id'); 
 

 
alert(JSON.stringify(result, null, 4));
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

+0

awesome thanks :) будет принимать, когда таймер поднялся –

1

Следующая должны это сделать :

var myUniqueArray = _.uniq(firstArray.concat(secondArray), false, function (obj) { 
    return obj.id; 
}); 

Здесь здесь будет указано значение, на которое проверяется уникальность, в этом случае значение свойства id.

Вот JSFiddle.

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