Здесь решение с использованием lodash и функции uniqWith: JSFiddle .
Вот код:
function merge(array) {
return _.uniqWith(array, compareAndMerge)
}
function compareAndMerge(first, second) {
if (first.field === second.field) {
first.values = second.values = [].concat(first.values, second.values)
return true
}
return false
}
var data = [{
field: 'Currency',
operator: 'IN',
values: ['usd']
}, {
field: 'Currency',
operator: 'IN',
values: ['gbp']
}, {
field: 'Amount',
operator: 'IN',
values: [2]
},
{
field: 'Amount',
operator: 'IN',
values: [3]
}]
console.log(merge(data))
Функция Lodash.uniqWidth хочет массив и компаратор. В случае равных полей мы редактируем значения двух сравниваемых элементов, назначая объединение двух массивов значений.
Нечто большее: редактирование объектов внутри компаратора является нарушением, но я думаю, что он может работать безопасно.