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

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -