0

I have the following JSON structure and I want to grab n random elements of each category (area_description) instead of displaying everything in a d3 visualization. What is the most clean way I can achieve that? My idea was to sort the JSON by area description and get the start and end of each category and then grab elements.

[

{

    "id": ​1,
    "number": "2-1",
    "type": "GENERAL",
    "location": "US2",
    "floor": ​2,
    "area_description": "High Perfomance Computing",
    "status": "ASSIGNED"

},
{

    "id": ​2,
    "number": "2-2",
    "type": "GENERAL",
    "location": "US2",
    "floor": ​2,
    "area_description": "High Perfomance Computing",
    "status": "AVAILABLE"

},
{

    "id": ​3,
    "number": "2-3",
    "type": "GENERAL",
    "location": "US2",
    "floor": ​2,
    "area_description": "Cloud",
    "status": "AVAILABLE"

},
{

    "id": ​4,
    "number": "2-4",
    "type": "GENERAL",
    "location": "US2",
    "floor": ​2,
    "area_description": "Cloud",
    "status": "AVAILABLE"

},
{

    "id": ​5,
    "number": "2-5",
    "type": "GENERAL",
    "location": "US2",
    "floor": ​2,
    "area_description": "Static",
    "status": "ASSIGNED"

}]
CollinD
  • 7,304
  • 2
  • 22
  • 45

1 Answers1

0

i wrote function, maybe it is not so clean, try this:

function getRandom(json){
    var n = arguments[1] || 1;
    var assoc_array = [];
    var result      = [];
    var random_num  = 0;

    for(var i in json){
        if(json.hasOwnProperty(i)){
            if(typeof assoc_array[ json[i].area_description ] == 'undefined'){
                assoc_array[ json[i].area_description ] = [];   
            }
            assoc_array[ json[i].area_description ].push(json[i]);
        }
    }

    while(n > 0){
        for(var key in assoc_array){
            if(assoc_array.hasOwnProperty(key)){
                random_num = Math.floor(Math.random() * (assoc_array[ key ].length));
                if(typeof assoc_array[ key ][ random_num ] != 'undefined'){
                    result.push(assoc_array[ key ][ random_num ]);
                }
            }
        }
        n--;
    }

    return result;
}
Veniamin
  • 459
  • 2
  • 9