简体   繁体   中英

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?

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>'); 

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> 

You can do it this way:

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 }
    };

First remove the string keys:

var d = [];
for(var k in dataset){
    d.push(dataset[k]);
}

Then iterate over resulting array modifying it accordingly:

for(var k in d){
    var value = d[k]['value'];
    if(value>=10 && value<=20){
        d[k].value=7;
    }
    if(value>=20 && value<=40){
        d[k].value=8;
    }
}

This gives the resuls you're looking for:

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 v = dataset[key].value;
    if (v >= 10 && v <= 20) dataset[key].value = 7;
    else if (v > 20 && v <= 40) dataset[key].value = 8;
    return dataset[key];
});

try this,

function datasetToArrOfObj(dataset){

    var rslt = [];

    for (var key in dataset) {
      if (dataset.hasOwnProperty(key)) {
         rslt.push(dataset[key]);
      }
    }
return rslt;    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM