Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove parent fields in json variable and convert it to json in javascript or jquery

Am working on some project which has lot of objects involvement. I have below requirement in javascript or jQuery.

I have below object:

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};

How can I remove parent fields and make it as object like below ?

var d= [
    { "id": 0, "name": "Housing", "value": 18 },
    { "id": 1, "name": "Travel", "value": 31.08 },
    { "id": 2, "name": "Restaurant", "value": 64 },
    { "id": 3, "name": "Bank", "value": 3 },
    { "id": 4, "name": "Movies", "value": 10 }
]

After doing this, I wanted to pass this object to a javascript function which manipulates the value of this variable d.

if(value >= 10 && value <= 20) {
    d[index].value = 7;
}
if(value >= 20 && value <= 40) {
    d[index].value = 8;
}

Updated object should look like :

var d= [
    { "id": 0, "name": "Housing", "value": 7 },
    { "id": 1, "name": "Travel", "value": 8 },
    { "id": 2, "name": "Restaurant", "value": 64 },
    { "id": 3, "name": "Bank", "value": 3 },
    { "id": 4, "name": "Movies", "value": 10 }
]

I tried looping to the dataset using for loop, but couldn't achieve my requirement.

Any help?

like image 979
Satheesh Panduga Avatar asked Nov 30 '25 03:11

Satheesh Panduga


2 Answers

Use Array#forEach with Object.keys() to iterate over object.

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};

// Declare resulting empty array
var d = [];

// Get object keys and iterate over them
Object.keys(dataset).forEach(function (key) {
    // Get the value from the object
    var value = dataset[key].value;

    // Update values if in the range
    if(value >= 10 && value <= 20) {
        dataset[key].value = 7;
    } else if(value > 20 && value <= 40) {
        dataset[key].value = 8;
    }

    // Push the updated(or not) value in the array
    d.push(dataset[key]);
});

console.log(d);
document.getElementById('result').innerHTML = JSON.stringify(d, null, 4);
<pre id="result"></pre>
like image 103
Tushar Avatar answered Dec 02 '25 16:12

Tushar


Just map it with Array.prototype.map method:

var dataset = {
    "d0": { "id": 0, "name": "Housing", "value": 18 },
    "d1": { "id": 1, "name": "Travel", "value": 31.08 },
    "d2": { "id": 2, "name": "Restaurant", "value": 64 },
    "d3": { "id": 3, "name": "Bank", "value": 3 },
    "d4": { "id": 4, "name": "Movies", "value": 10 }
};

var d = Object.keys(dataset).map(function(key) {
    var obj = dataset[key];
    if (obj.value >= 10 && obj.value <= 20) {
        obj.value = 7;
    }
    else if (obj.value >= 20 && obj.value <= 40) {
        obj.value = 8;
    }
    return obj;
});

document.write('<pre>' + JSON.stringify(d, null, 4) + '</pre>');
like image 43
dfsq Avatar answered Dec 02 '25 16:12

dfsq