-1

I have a set of JSON data like this:

{"id":1,"name":"Sam","birthday":"12December","age":"15"},
{"id":2,"name":"Ash","birthday":"12January","age":"23"}

I passed the data through the function:

ConvertToCSV(data)

Now I am able to get id, name, birthday and age in the csv. However, I want to remove birthday column during the conversion so that it does not show up in the csv generated. How can I do that?

Current Output:

id | name | birthday   | age      
1  | Sam  | 12December | 15      
2  | Ash  | 12January  | 23       

Desired Output:

id | name | age
1  | Sam  | 15
2  | Ash  | 23

Here is the original code:

ConvertToCSV(data) {
        var array = $.parseJSON('[' + data + ']');
        var fields = Object.keys(array[0]);
        var replacer = function(key, value) { return value === null ? '' : value } 
        var csv = array.map(function(row){
            return fields.map(function(fieldname){
                return JSON.stringify(row[fieldname], replacer)
            }).join(',')
        })
        csv.unshift(fields.join(',')) // add header column
        var str = csv.join('\r\n');
        return str;
    }

I added the following into the function according to here:

for(var i = array.length - 1; i >= 0; i--) {
    var index = array[i].birthday;
    array[i].splice(index, 1);
}

But the above code does not work, anyone can help me? Thank you!

icedmilocode
  • 95
  • 1
  • 2
  • 12

1 Answers1

1

Filter the fields to remove 'birthday':

var fields = Object.keys(array[0])
  .filter(field => field !== 'birthday');

Full code (using native JSON.parse):

var data = `
{"id":1,"name":"Sam","birthday":"12December","age":"15"},
{"id":2,"name":"Ash","birthday":"12January","age":"23"}
`;

var ConvertToCSV = (data) => {
    var array = JSON.parse('[' + data + ']');
    var fields = Object.keys(array[0]).filter(field => field !== 'birthday');
    var replacer = function (key, value) { return value === null ? '' : value }
    var csv = array.map(function (row) {
        return fields.map(function (fieldname) {
            return JSON.stringify(row[fieldname], replacer)
        }).join(',')
    })
    csv.unshift(fields.join(',')) // add header column
    var str = csv.join('\r\n');
    return str;
};

console.log(ConvertToCSV(data));    
Robert Penner
  • 5,129
  • 1
  • 13
  • 18