3

I have this code for getting data for chart:

function createData(data) {
    if ($("#options").val() == 1) {
        var totalTopProfit = eval(data.data[0].profit.replace(/[^\d\.]/g, '') + '+' + data.data[1].profit.replace(/[^\d\.]/g, '') + '+' + data.data[2].profit.replace(/[^\d\.]/g, '') + '+' + data.data[3].profit.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 1);

        var data = [{
            "company": data.data[0].company,
            "profit": data.data[0].profit,
            "percentage": parseFloat(eval((data.data[0].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].company,
            "profit": data.data[1].profit,
            "percentage": parseFloat(eval((data.data[1].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].company,
            "profit": data.data[2].profit,
            "percentage": parseFloat(eval((data.data[2].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].company,
            "profit": data.data[3].profit,
            "percentage": parseFloat(eval((data.data[3].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    } else if ($("#options").val() == 2) {
        var totalTopProfit = eval(data.data[0].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[1].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[2].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[3].revenue.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 2);

        var data = [{
            "company": data.data[0].company,
            "profit": data.data[0].revenue,
            "percentage": parseFloat(eval((data.data[0].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].company,
            "profit": data.data[1].revenue,
            "percentage": parseFloat(eval((data.data[1].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].company,
            "profit": data.data[2].revenue,
            "percentage": parseFloat(eval((data.data[2].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].company,
            "profit": data.data[3].revenue,
            "percentage": parseFloat(eval((data.data[3].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    } else if ($("#options").val() == 3) {
        var totalTopProfit = eval(data.data[0].profit.replace(/[^\d\.]/g, '') + '+' + data.data[1].profit.replace(/[^\d\.]/g, '') + '+' + data.data[2].profit.replace(/[^\d\.]/g, '') + '+' + data.data[3].profit.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 3);

        var data = [{
            "company": data.data[0].offer,
            "profit": data.data[0].profit,
            "percentage": parseFloat(eval((data.data[0].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].offer,
            "profit": data.data[1].profit,
            "percentage": parseFloat(eval((data.data[1].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].offer,
            "profit": data.data[2].profit,
            "percentage": parseFloat(eval((data.data[2].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].offer,
            "profit": data.data[3].profit,
            "percentage": parseFloat(eval((data.data[3].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    } else if ($("#options").val() == 4) {
        var totalTopProfit = eval(data.data[0].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[1].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[2].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[3].revenue.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 4);

        var data = [{
            "company": data.data[0].offer,
            "profit": data.data[0].revenue,
            "percentage": parseFloat(eval((data.data[0].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].offer,
            "profit": data.data[1].revenue,
            "percentage": parseFloat(eval((data.data[1].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].offer,
            "profit": data.data[2].revenue,
            "percentage": parseFloat(eval((data.data[2].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].offer,
            "profit": data.data[3].revenue,
            "percentage": parseFloat(eval((data.data[3].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    } else if ($("#options").val() == 5) {
        var totalTopProfit = eval(data.data[0].profit.replace(/[^\d\.]/g, '') + '+' + data.data[1].profit.replace(/[^\d\.]/g, '') + '+' + data.data[2].profit.replace(/[^\d\.]/g, '') + '+' + data.data[3].profit.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 5);

        var data = [{
            "company": data.data[0].advertiser,
            "profit": data.data[0].profit,
            "percentage": parseFloat(eval((data.data[0].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].advertiser,
            "profit": data.data[1].profit,
            "percentage": parseFloat(eval((data.data[1].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].advertiser,
            "profit": data.data[2].profit,
            "percentage": parseFloat(eval((data.data[2].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].advertiser,
            "profit": data.data[3].profit,
            "percentage": parseFloat(eval((data.data[3].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    } else if ($("#options").val() == 6) {
        var totalTopProfit = eval(data.data[0].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[1].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[2].revenue.replace(/[^\d\.]/g, '') + '+' + data.data[3].revenue.replace(/[^\d\.]/g, '')).toFixed(2);
        var totalProfit = eval(data.others.replace(/[^\d\.]/g, ''));
        var othersProfit = parseFloat(totalProfit) - totalTopProfit;

        createLegend(data, othersProfit, 6);

        var data = [{
            "company": data.data[0].advertiser,
            "profit": data.data[0].revenue,
            "percentage": parseFloat(eval((data.data[0].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[1].advertiser,
            "profit": data.data[1].revenue,
            "percentage": parseFloat(eval((data.data[1].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[2].advertiser,
            "profit": data.data[2].revenue,
            "percentage": parseFloat(eval((data.data[2].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": data.data[3].advertiser,
            "profit": data.data[3].revenue,
            "percentage": parseFloat(eval((data.data[3].revenue.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
        }, {
            "company": "Others",
            "profit": numberWithCommas(othersProfit.toFixed(2)),
            "percentage": parseFloat(eval((othersProfit / totalProfit) * 100).toFixed(2))
        }];
    }
    return data;
}

Problem is when profit have negative value, then it break chart. Now i need to check is "profit" ("profit": data.data[0].profit) negative and if it is, then i need to remove all this data for that profit that have negative value and in data return only datas that have positive profit.

{
    "company": data.data[0].company,
    "profit": data.data[0].profit,
    "percentage": parseFloat(eval((data.data[0].profit.replace(/[^\d\.]/g, '') / totalProfit) * 100).toFixed(2))
}

Does anyone know how can i check this?

4
  • are you sure you want to remove the value from the array... i had worked with charts and each data point is mapped to x or y axis data, removing them will shift the data by 1 index. If you can provide working code snippet it would be helpful. Commented Dec 27, 2017 at 10:36
  • You're calling createLegend(data, ...) before data is initialized Commented Dec 27, 2017 at 10:37
  • I'm sure that i want to remove value from the array. Yes I'm calling that method, for legend i use this data values createData(data) Commented Dec 27, 2017 at 10:40
  • If this codes works as it is supposed to, I would suggest to head over to CodeReview to get some input on how to improve your function. Commented Dec 27, 2017 at 10:41

1 Answer 1

1

I think you can use filter function in javascript to achieve this.

data=data.data.filter((d)=>{// as your data array is inside data object
return d.profit>=0;
})

Now u will have only data which have positive or zero profit.

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

3 Comments

since it is data points in a graph, dont you think it will affect the graph?
I think the OP is using this function to return data to the chart. So if he filters it before the chart would be rendered then it will be rendered according to the data given to it.
Glad I was helpful :)

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.