javascript - Find maximum value from JSON objects from array and Merge them -


i new javascript , have json array contains duplicate keys below:

var connections = [    {       "source":"l1",       "target":"l2",       "metrics": { "normal":20  },       "metadata": { "streaming": 1 }     },    {       "source":"l2",       "target":"l3",       "metrics": { "normal":30  },       "metadata": { "streaming": 1 }     },      {       "source":"l2",       "target":"l3",       "metrics": { "normal":25  },       "metadata": { "streaming": 1 }     },     {       "source":"l3",       "target":"l4",       "metrics": { "normal":24  },       "metadata": { "streaming": 1 }     },     {       "source":"l3",       "target":"l4",       "metrics": { "normal":21  },       "metadata": { "streaming": 1 }     },     {       "source":"l3",       "target":"l4",       "metrics": { "normal":20  },       "metadata": { "streaming": 1 }     },   ] 

now want merge duplicate json has same value of "source" , "target" , key "normal" should maximum of same source , target. answer given example be:

var answer =[ {           "source":"l1",           "target":"l2",           "metrics": { "normal":20  },           "metadata": { "streaming": 1 }         },        {           "source":"l2",           "target":"l3",           "metrics": { "normal":30  },           "metadata": { "streaming": 1 }         },         {           "source":"l3",           "target":"l4",           "metrics": { "normal":24  },           "metadata": { "streaming": 1 }         },  ]  

this example object goes on different objects. don't know how solve problem, think underscore or lodash can easy solve problem knid of solution accepted.

use _.groupby() collect objects source , target. use _.map() , array#reduce 1 maximum normal value in each group.

var connections = [{"source":"l1","target":"l2","metrics":{"normal":20},"metadata":{"streaming":1}},{"source":"l2","target":"l3","metrics":{"normal":30},"metadata":{"streaming":1}},{"source":"l2","target":"l3","metrics":{"normal":25},"metadata":{"streaming":1}},{"source":"l3","target":"l4","metrics":{"normal":24},"metadata":{"streaming":1}},{"source":"l3","target":"l4","metrics":{"normal":21},"metadata":{"streaming":1}},{"source":"l3","target":"l4","metrics":{"normal":20},"metadata":{"streaming":1}}];    var result = _(connections)    .groupby(function(o) { // group source , target      return o.source + '-' + o.target;    })    .map(function(arr) { // map groups values      return arr.reduce(function(max, o) { // object hight normal in each group        return max.metrics.normal > o.metrics.normal ? max : o;      });    })    .value();    console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -