Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSON Parse splice issue

Tags:

javascript

I can't seem to work out why splice isn't working correctly in this instance.

I have read countless stack overflow examples of splice and I can't seem to see an issue.

This code should basically remove index 14, from the first item(and only) in the JSON array.

var product_variations = JSON.parse('[{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}]');

product_variations[0].splice(14, 1); 
like image 883
jdawg Avatar asked Apr 29 '26 08:04

jdawg


1 Answers

It does not work because splice is a method available on arrays, not on objects.

And this is an object:

{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}

Actually you get an error like:

TypeError: undefined is not a function (evaluating 'product_variations[0].splice(14, 1)')

You can use delete instead or convert it to an array:

delete product_variations[0]["14"]

To convert it to an array you could try:

function objectToArray(p){
    var keys = Object.keys(p);
    keys.sort(function(a, b) {
        return a - b;
    });

    var arr = [];
    for (var i = 0; i < keys.length; i++) {
        arr.push(p[keys[i]]);
    }
    return arr;
}

var product_variations = JSON.parse('[{"0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[],"12":"","13":"","14":"Red","15":"Small"}]');

var arr = objectToArray(product_variations[0]);

arr.splice(14, 1); 
like image 50
idmean Avatar answered Apr 30 '26 21:04

idmean