3

I have data the following data:

var v = {
  "2015-09-23":[
    {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"8.3",Id:1},
    {"AllConversions":"0.0","AverageCpc":"0.00","AverageCpm":"0.00","AveragePosition":"9.0",Id:1}
  ],
  "2015-09-18":[
    {"AllConversions":"0.1","AverageCpc":"77.14","AverageCpm":"239.57","AveragePosition":"7.7",Id:1},
    {"AllConversions":"0.0","AverageCpc":"39.97","AverageCpm":"703.91","AveragePosition":"3.8",Id:1},   
    {"AllConversions":"0.0","AverageCpc":"20.40","AverageCpm":"381.36","AveragePosition":"4.3",Id:1}
  ]
};

var columns = [
    "AllConversions",
  "AverageCpc",
  "AverageCpm",
  "AveragePosition"
];

And I want to return the following object which is the sum of all the fields without Id:

{
  "2015-09-23": [
        {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"17.3",Id:1}
  ],
    "2015-09-18": [
        {"AllConversions":"0.1","AverageCpc":"137.51","AverageCpm":"1324.84","AveragePosition":"15.8",Id:1}
  ]
}

I tried this code utilising underscrore:

_.each(columns,function(item){
    var out = _(groups).map(function (g, key) {
        return {
            Date: key,
                item: _(g).reduce(function (m, x) { return m + x.item; }, 0)
        }
    });
});

But I get a 'NaN' error when running the code.

7
  • Please format your code properly Commented Jun 29, 2016 at 11:16
  • I would sum all objects on server-side and return it in JSON. In case you have access to server-side. Commented Jun 29, 2016 at 11:59
  • Just iterate through the Json array values!! and store them in a array and find the average Commented Jun 29, 2016 at 11:59
  • server side not possible for me the data coming from GoogleAdwordApi we are accessing data and changing in js only @ Aleksej Vasinov Commented Jun 29, 2016 at 12:15
  • @mitrap check my answer and mark it as correct and vote it up if it helps.. Commented Jun 30, 2016 at 12:45

1 Answer 1

1

Check this out..

<html>
<head>
    <script>
        var v={

        "2015-09-23":[
            {"AllConversions":"0.1","AverageCpc":"0.01","AverageCpm":"0.02","AveragePosition":"8.3",Id:1},    
            {"AllConversions":"0.0","AverageCpc":"0.00","AverageCpm":"0.00","AveragePosition":"9.0",Id:1}
        ],

        "2015-09-18":[
            {"AllConversions":"0.1","AverageCpc":"77.14","AverageCpm":"239.57","AveragePosition":"7.7",Id:1},
            {"AllConversions":"0.0","AverageCpc":"39.97","AverageCpm":"703.91","AveragePosition":"3.8",Id:1},   

            {"AllConversions":"0.0","AverageCpc":"20.40","AverageCpm":"381.36","AveragePosition":"4.3",Id:1}

        ]};


        var columns=[
        "AllConversions","AverageCpc","AverageCpm","AveragePosition"
        ];

    var output = {};
    var smallOutput = {};
    var tempDate = [];
        for(var i in v){
            var temp = 0;
            for(var j = 0; j < columns.length ; j++){
                for(var k = 0 ; k < v[i].length; k++)   temp += parseFloat(v[i][k][columns[j]]);

                smallOutput[columns[j]] = temp ;
                temp=0;

            }
            output[[i]] = smallOutput;
        }

        console.log(output);


</script>
</head>
<body>
</body>
</html>

Here is the fiddle.. https://jsfiddle.net/4t1teyk0/

Check your console.

Here is the output

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.