Given this object array:
[ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q7', target_q_id: null },
{ source_q_id: 'Q7', target_q_id: null }]
I need a new array of unique dupes for both key/values:
[ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q7', target_q_id: null }]
I'm using code from this SO answer, but it's removing too many target_q_id unique dupes as it isn't counting source_q_id dupes:
[ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' } ]
The code:
function dupesOnly(arr, 'target_q_id') {
var seen = {},
ret = [];
arr.forEach(function(item) {
var key = item[field],
val = seen[key];
if (!val) {
seen[key] = val = {
initial: item,
count: 0
}
}
if (val.count === 1) {
ret.push(val.initial);
}
++val.count;
});
return ret;
}
How would I modify the code to find unique dupes for both source_q_id and target_q_id?