简体   繁体   中英

create json like key and value

var data1=[
    {"year":2000,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Current account balance - National Currency (millions)"
    },
    {"year":2005,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Current account balance - National Currency (millions)"
    },
    {"year":2000,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Net Income - National Currency (millions)"
    },
    {"year":2005,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Net Income - National Currency (millions)"
    }
]

this is my json data i want to do like this using underscorejs

{
  "key":"Madagascar"
  "values":[
    {"year":2000,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Current account balance - National Currency (millions)"
    },
    {"year":2005,
     "country":"Madagascar",
     "country_id":847,
     "indicator":"Current account balance - National Currency (millions)"
    }
  ]
}

please can any one can help me to solve this problem using underscore.js

Underscore has a _.groupBy() method can do the heavy lifting, but it creates an object with a key for each value:

var groupedData1 = _.groupBy(data1, 'country');

Here's the value of groupedData1:

{"Madagascar": [
    {
        "year": 2000,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Current account balance - National Currency (millions)"
    }, 
    {
        "year": 2005,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Current account balance - National Currency (millions)"
    }, 
    {
        "year": 2000,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Net Income - National Currency (millions)"
    }, 
    {
        "year": 2005,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Net Income - National Currency (millions)"
    }
]}

To convert into an array of key/values, you can use _.each() and _.keys() to iterate through each country:

var groupedData2 = [];

_.each(_.keys(groupedData1), function (country) {
    groupedData2.push({
        "key": country, 
        "values": groupedData1[country]
    });
});

This creates an array of objects, one object for each country:

[{
    "key": "Madagascar",
    "values": [{
        "year": 2000,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Current account balance - National Currency (millions)"
    }, {
        "year": 2005,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Current account balance - National Currency (millions)"
    }, {
        "year": 2000,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Net Income - National Currency (millions)"
    }, {
        "year": 2005,
        "country": "Madagascar",
        "country_id": 847,
        "indicator": "Net Income - National Currency (millions)"
    }]
}] 

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