Javascript: Find object array value dupes matching multiple fields -
given 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 new array of unique dupes 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 so answer, it's removing many target_q_id
unique dupes 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 modify code find unique dupes both source_q_id
, target_q_id
?
you can combine these properties , use key in set.
note: if .push
items in .foreach
, wrong.
try utilizing array.prototype.filter
:
array.prototype.uniqueby = function(keybuilder) { var seen = {}; return this.filter(function(o) { // build filter key using provided function var key = keybuilder(o); // if item exists - not add result if (seen[key]) return false; // add item set , add item result // shortand for: // seen[key] = true; return true; return (seen[key] = true); }); } var obj = [{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}]; var objfiltered = obj.uniqueby(function(o) { return o.source_q_id + "~~~" + o.target_q_id; }); console.log(objfiltered);
Comments
Post a Comment