Search code examples
javascriptecma

javascript using reduce function


I have the below array

 ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2" ] 

i want the output as ["5,p1","10,p2","5,p3"] , so p1..3 are video files paying time with start and end time . 0,5 mean p1 profile played for 5 sec and so on. I want to know what profile take what time in total using ECMA script map,reduce function. Here is what i tried but it doesnt work:

 var ca =   uniqueArray.reduce(function(pval, elem) {
    var spl = elem.split(',');
            var difference = Math.round(spl[1] - spl[0]);
            return difference;
    },elem.split(',')[3]);

Solution

  • I dont think it can be done in one pass, but I could be wrong. I'd go for a 2 step...

    1. Reduce the array to get unique map of pX values
    2. Map the result back to an array in the required format

    var input = ["0,5,p1", "24,29,p2", "78,83,p2", "78,83,p3", "162,167,p2" ] 
    
    var step1 = input.reduce(function(p,c){
        var parts = c.split(",");
        if(!p[parts[2]])
           p[parts[2]] = 0;
        p[parts[2]] += parseInt(parts[1],10) - parseInt(parts[0],10);
        return p;
    },{});
    
    var result = Object.keys(step1).map(function(e){
        return step1[e] + "," + e;
    });
    
    console.log(result);