2016-08-31 3 views
-3
var firstOne = [ 
    { id: 22, value: 'hi there' }, 
    { id: 28, value: 'here' }, 
    { id: 77, value: 'what' } 
]; 

var secondOne = [ 
    { id: 2, value: 'bond' }, 
    { id: 8, value: 'foobar' }, 
    { id: 87, value: 'what' } 
]; 

Я ищу лучший подход для сравнения двух массивов объектов по стоимости. Если значение равно в обоих, а затем удалить его из FirstOne, которое привело бы к:Сравнить значения в двух массивах obj и удалить с первых

var firstOne = [ 
    { id: 22, value: 'hi there' }, 
    { id: 28, value: 'here' } 
]; 

var secondOne = [ 
    { id: 2, value: 'bond' }, 
    { id: 8, value: 'foobar' }, 
    { id: 87, value: 'what' } 
]; 

Мусор или угловые решения будут оценены. Спасибо

+3

Мы не сервис написания кода. Пожалуйста, напишите свой собственный код и представите проблему, и мы будем рады помочь вам. – Li357

+0

«Javascript or Angular solutions» - это как-то вроде «забрать автомобиль или Toyota Corolla». Угловое является фреймворком * в JavaScript *. – Amadan

+1

Возможный дубликат [Сравнить два массива объектов и удалить элементы во втором, которые имеют одинаковое значение свойства] (http://stackoverflow.com/questions/17830390/compare-two-arrays-of-objects-and-remove -items-in-the-second-one-that-have-the-s) – yash

ответ

1

Вы можете использовать Set для фильтрации.

var firstOne = [{ id: 22, value: 'hi there' }, { id: 28, value: 'here' }, { id: 77, value: 'what' }], 
 
    secondOne = [{ id: 2, value: 'bond' }, { id: 8, value: 'foobar' }, { id: 87, value: 'what' }], 
 
    mySet = new Set; 
 

 
secondOne.forEach(function (a) { 
 
    mySet.add(a.value); 
 
}); 
 

 
firstOne = firstOne.filter(function (a) { 
 
    return !mySet.has(a.value); 
 
}); 
 

 
console.log(firstOne);

ES6

var firstOne = [{ id: 22, value: 'hi there' }, { id: 28, value: 'here' }, { id: 77, value: 'what' }], 
 
    secondOne = [{ id: 2, value: 'bond' }, { id: 8, value: 'foobar' }, { id: 87, value: 'what' }], 
 
    mySet = new Set; 
 

 
secondOne.forEach(a => mySet.add(a.value)); 
 
firstOne = firstOne.filter(a => !mySet.has(a.value)); 
 

 
console.log(firstOne);