Was ist das Ziel von  d3.nest()?

  • Daten liegen nicht in der richtigen Ausformung vor und ich möchte sie umformen

Beispiel 1: Daten des Monopolie-Spiels so umformen, dass alle Straßen einer Farbe gruppiert werden.

siehe auch https://www.youtube.com/watch?v=6dcj3X6Bfsk

Daten:

var data ={
   "properties":[
      {
         "name":"Mediterranean Avenue",
         "id":"mediterraneanave",
         "posistion":2,
         "price":60,
         "rent":2,
         "multpliedrent":[
            10,
            30,
            90,
            160,
            250
         ],
         "housecost":50,
         "group":"Purple",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "probability":2.1314,
         "rel":{
            "Square":"Mediterranean Avenue",
            "Probability % (Jail Short)":2.1314,
            "Rank":36,
            "Probability % (Jail Long)":2.0073
         },
         "ohousecost":50,
         "oprice":60,
         "averageProbability":2.06935
      },
      {
         "name":"Baltic Avenue",
         "id":"balticave",
         "posistion":4,
         "price":60,
         "rent":4,
         "multpliedrent":[
            20,
            60,
            180,
            320,
            450
         ],
         "housecost":50,
         "group":"Purple",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "probability":2.1624,
         "rel":{
            "Square":"Baltic Avenue",
            "Probability % (Jail Short)":2.1624,
            "Rank":35,
            "Probability % (Jail Long)":2.0369
         },
         "ohousecost":50,
         "oprice":60,
         "averageProbability":2.09965
      },
      {
         "name":"Oriental Avenue",
         "id":"orientalave",
         "posistion":7,
         "price":100,
         "rent":6,
         "multpliedrent":[
            30,
            90,
            270,
            400,
            550
         ],
         "housecost":50,
         "group":"lightgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Oriental Avenue",
            "Probability % (Jail Short)":2.2621,
            "Rank":32,
            "Probability % (Jail Long)":2.1317
         },
         "ohousecost":50,
         "oprice":100,
         "averageProbability":2.1969000000000003
      },
      {
         "name":"Vermont Avenue",
         "id":"vermontave",
         "posistion":9,
         "price":100,
         "rent":6,
         "multpliedrent":[
            30,
            90,
            270,
            400,
            550
         ],
         "housecost":50,
         "group":"lightgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Vermont Avenue",
            "Probability % (Jail Short)":2.321,
            "Rank":28,
            "Probability % (Jail Long)":2.1874
         },
         "ohousecost":50,
         "oprice":100,
         "averageProbability":2.2542
      },
      {
         "name":"Connecticut Avenue",
         "id":"connecticutave",
         "posistion":10,
         "price":120,
         "rent":8,
         "multpliedrent":[
            40,
            100,
            300,
            450,
            600
         ],
         "housecost":50,
         "group":"lightgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Connecticut Avenue",
            "Probability % (Jail Short)":2.3003,
            "Rank":30,
            "Probability % (Jail Long)":2.168
         },
         "ohousecost":50,
         "oprice":120,
         "averageProbability":2.23415
      },
      {
         "name":"St. Charles Place",
         "id":"stcharlesplace",
         "posistion":12,
         "price":140,
         "rent":10,
         "multpliedrent":[
            50,
            150,
            450,
            625,
            750
         ],
         "housecost":100,
         "group":"Violet",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"St. Charles Place",
            "Probability % (Jail Short)":2.7017,
            "Rank":15,
            "Probability % (Jail Long)":2.556
         },
         "ohousecost":100,
         "oprice":140,
         "averageProbability":2.62885
      },
      {
         "name":"States Avenue",
         "id":"statesave",
         "posistion":14,
         "price":140,
         "rent":10,
         "multpliedrent":[
            50,
            150,
            450,
            625,
            750
         ],
         "housecost":100,
         "group":"Violet",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"States Avenue",
            "Probability % (Jail Short)":2.3721,
            "Rank":29,
            "Probability % (Jail Long)":2.1741
         },
         "ohousecost":100,
         "oprice":140,
         "averageProbability":2.2731000000000003
      },
      {
         "name":"Virginia Avenue",
         "id":"virginiaave",
         "posistion":15,
         "price":160,
         "rent":12,
         "multpliedrent":[
            60,
            180,
            500,
            700,
            900
         ],
         "housecost":100,
         "group":"Violet",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Virginia Avenue",
            "Probability % (Jail Short)":2.4649,
            "Rank":22,
            "Probability % (Jail Long)":2.4255
         },
         "ohousecost":100,
         "oprice":160,
         "averageProbability":2.4452
      },
      {
         "name":"St. James Place",
         "id":"stjamesplace",
         "posistion":17,
         "price":180,
         "rent":14,
         "multpliedrent":[
            70,
            200,
            550,
            750,
            950
         ],
         "housecost":100,
         "group":"Orange",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"St. James Place",
            "Probability % (Jail Short)":2.7924,
            "Rank":9,
            "Probability % (Jail Long)":2.6802
         },
         "ohousecost":100,
         "oprice":180,
         "averageProbability":2.7363
      },
      {
         "name":"Tennessee Avenue",
         "id":"tennesseeave",
         "posistion":19,
         "price":180,
         "rent":14,
         "multpliedrent":[
            70,
            200,
            550,
            750,
            950
         ],
         "housecost":100,
         "group":"Orange",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Tennessee Avenue",
            "Probability % (Jail Short)":2.9356,
            "Rank":6,
            "Probability % (Jail Long)":2.821
         },
         "ohousecost":100,
         "oprice":180,
         "averageProbability":2.8783000000000003
      },
      {
         "name":"New York Avenue",
         "id":"newyorkave",
         "posistion":20,
         "price":200,
         "rent":16,
         "multpliedrent":[
            80,
            220,
            600,
            800,
            1000
         ],
         "housecost":100,
         "group":"Orange",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"New York Avenue",
            "Probability % (Jail Short)":3.0852,
            "Rank":7,
            "Probability % (Jail Long)":2.8118
         },
         "ohousecost":100,
         "oprice":200,
         "averageProbability":2.9485
      },
      {
         "name":"Kentucky Avenue",
         "id":"kentuckyave",
         "posistion":22,
         "price":220,
         "rent":18,
         "multpliedrent":[
            90,
            250,
            700,
            875,
            1050
         ],
         "housecost":150,
         "group":"Red",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Kentucky Avenue",
            "Probability % (Jail Short)":2.8358,
            "Rank":12,
            "Probability % (Jail Long)":2.6143
         },
         "ohousecost":150,
         "oprice":220,
         "averageProbability":2.72505
      },
      {
         "name":"Indiana Avenue",
         "id":"indianaave",
         "posistion":24,
         "price":220,
         "rent":18,
         "multpliedrent":[
            90,
            250,
            700,
            875,
            1050
         ],
         "housecost":150,
         "group":"Red",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Indiana Avenue",
            "Probability % (Jail Short)":2.7357,
            "Rank":14,
            "Probability % (Jail Long)":2.5671
         },
         "ohousecost":150,
         "oprice":220,
         "averageProbability":2.6513999999999998
      },
      {
         "name":"Illinois Avenue",
         "id":"illinoisave",
         "posistion":25,
         "price":240,
         "rent":20,
         "multpliedrent":[
            100,
            300,
            750,
            925,
            1100
         ],
         "housecost":150,
         "group":"Red",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Illinois Avenue",
            "Probability % (Jail Short)":3.1858,
            "Rank":2,
            "Probability % (Jail Long)":2.9929
         },
         "ohousecost":150,
         "oprice":240,
         "averageProbability":3.08935
      },
      {
         "name":"Atlantic Avenue",
         "id":"atlanticave",
         "posistion":27,
         "price":260,
         "rent":22,
         "multpliedrent":[
            110,
            330,
            800,
            975,
            1150
         ],
         "housecost":150,
         "group":"Yellow",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Atlantic Avenue",
            "Probability % (Jail Short)":2.7072,
            "Rank":16,
            "Probability % (Jail Long)":2.537
         },
         "ohousecost":150,
         "oprice":260,
         "averageProbability":2.6220999999999997
      },
      {
         "name":"Ventnor Avenue",
         "id":"ventnorave",
         "posistion":28,
         "price":260,
         "rent":22,
         "multpliedrent":[
            110,
            330,
            800,
            975,
            1150
         ],
         "housecost":150,
         "group":"Yellow",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Ventnor Avenue",
            "Probability % (Jail Short)":2.6789,
            "Rank":18,
            "Probability % (Jail Long)":2.5191
         },
         "ohousecost":150,
         "oprice":260,
         "averageProbability":2.599
      },
      {
         "name":"Marvin Gardens",
         "id":"marvingardens",
         "posistion":30,
         "price":280,
         "rent":22,
         "multpliedrent":[
            120,
            360,
            850,
            1025,
            1200
         ],
         "housecost":150,
         "group":"Yellow",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Marvin Gardens",
            "Probability % (Jail Short)":2.5861,
            "Rank":21,
            "Probability % (Jail Long)":2.4381
         },
         "ohousecost":150,
         "oprice":280,
         "averageProbability":2.5121
      },
      {
         "name":"Pacific Avenue",
         "id":"pacificave",
         "posistion":32,
         "price":300,
         "rent":26,
         "multpliedrent":[
            130,
            390,
            900,
            1100,
            1275
         ],
         "housecost":200,
         "group":"darkgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Pacific Avenue",
            "Probability % (Jail Short)":2.6774,
            "Rank":17,
            "Probability % (Jail Long)":2.5236
         },
         "ohousecost":200,
         "oprice":300,
         "averageProbability":2.6005000000000003
      },
      {
         "name":"North Carolina Avenue",
         "id":"northcarolinaave",
         "posistion":33,
         "price":300,
         "rent":26,
         "multpliedrent":[
            130,
            390,
            900,
            1100,
            1275
         ],
         "housecost":200,
         "group":"darkgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"North Carolina Avenue",
            "Probability % (Jail Short)":2.6252,
            "Rank":20,
            "Probability % (Jail Long)":2.4721
         },
         "ohousecost":200,
         "oprice":300,
         "averageProbability":2.5486500000000003
      },
      {
         "name":"Pennsylvania Avenue",
         "id":"pennsylvaniaave",
         "posistion":35,
         "price":320,
         "rent":28,
         "multpliedrent":[
            150,
            450,
            1000,
            1200,
            1400
         ],
         "housecost":200,
         "group":"darkgreen",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Pennsylvania Avenue",
            "Probability % (Jail Short)":2.5006,
            "Rank":23,
            "Probability % (Jail Long)":2.3531
         },
         "ohousecost":200,
         "oprice":320,
         "averageProbability":2.42685
      },
      {
         "name":"Park Place",
         "id":"parkplace",
         "posistion":38,
         "price":350,
         "rent":35,
         "multpliedrent":[
            175,
            500,
            1100,
            1300,
            1500
         ],
         "housecost":200,
         "group":"darkblue",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Park Place",
            "Probability % (Jail Short)":2.1864,
            "Rank":33,
            "Probability % (Jail Long)":2.0595
         },
         "ohousecost":200,
         "oprice":350,
         "averageProbability":2.12295
      },
      {
         "name":"Boardwalk",
         "id":"boardwalk",
         "posistion":40,
         "price":400,
         "rent":50,
         "multpliedrent":[
            200,
            600,
            1400,
            1700,
            2000
         ],
         "housecost":200,
         "group":"darkblue",
         "ownedby":-1,
         "buildings":0,
         "mortgaged":false,
         "rel":{
            "Square":"Boardwalk",
            "Probability % (Jail Short)":2.626,
            "Rank":19,
            "Probability % (Jail Long)":2.4832
         },
         "ohousecost":200,
         "oprice":400,
         "averageProbability":2.5545999999999998
      },
      {
         "name":"Electric Company",
         "id":"electriccompany",
         "posistion":13,
         "price":150,
         "group":"Utilities",
         "ownedby":-1,
         "mortgaged":false,
         "rel":{
            "Square":"Electric Company",
            "Probability % (Jail Short)":2.604,
            "Rank":13,
            "Probability % (Jail Long)":2.614
         },
         "oprice":150,
         "averageProbability":2.609
      },
      {
         "name":"Water Works",
         "id":"waterworks",
         "posistion":29,
         "price":150,
         "group":"Utilities",
         "ownedby":-1,
         "mortgaged":false,
         "rel":{
            "Square":"Water Works",
            "Probability % (Jail Short)":2.8074,
            "Rank":10,
            "Probability % (Jail Long)":2.6507
         },
         "oprice":150,
         "averageProbability":2.72905
      },
      {
         "name":"Reading Railroad",
         "id":"readingrailroad",
         "posistion":6,
         "price":200,
         "group":"Railroad",
         "ownedby":-1,
         "mortgaged":false,
         "probability":2.1314,
         "rel":{
            "Square":"Reading Railroad",
            "Probability % (Jail Short)":2.9631,
            "Rank":8,
            "Probability % (Jail Long)":2.801
         },
         "oprice":200,
         "averageProbability":2.88205
      },
      {
         "name":"Pennsylvania Railroad",
         "id":"pennsylvaniarailroad",
         "posistion":16,
         "price":200,
         "group":"Railroad",
         "ownedby":-1,
         "mortgaged":false,
         "rel":{
            "Square":"Pennsylvania Railroad",
            "Probability % (Jail Short)":2.92,
            "Rank":11,
            "Probability % (Jail Long)":2.6354
         },
         "oprice":200,
         "averageProbability":2.7777000000000003
      },
      {
         "name":"B. & O. Railroad",
         "id":"borailroad",
         "posistion":26,
         "price":200,
         "group":"Railroad",
         "ownedby":-1,
         "mortgaged":false,
         "oprice":200,
         "averageProbability":2.975
      },
      {
         "name":"Short Line Railroad",
         "id":"shortlinerailroad",
         "posistion":36,
         "price":200,
         "group":"Railroad",
         "ownedby":-1,
         "mortgaged":false,
         "oprice":200,
         "averageProbability":2.3609500000000002
      },
      {
         "name":"Go",
         "id":"go",
         "posistion":0,
         "group":"Special",
         "rel":{
            "Square":"Go",
            "Probability % (Jail Short)":3.0961,
            "Rank":3,
            "Probability % (Jail Long)":2.9143
         },
         "averageProbability":3.0052
      },
      {
         "name":"Income Tax",
         "id":"incometax",
         "group":"Special",
         "rel":{
            "Square":"Income Tax",
            "Probability % (Jail Short)":2.3285,
            "Rank":27,
            "Probability % (Jail Long)":2.1934
         },
         "averageProbability":2.2609500000000002
      },
      {
         "name":"Jail / Just Visiting",
         "id":"jail",
         "posistion":10,
         "group":"Special",
         "averageProbability":8.897
      },
      {
         "name":"Chance",
         "id":"chance",
         "group":"Special",
         "rel":{
            "Square":"Chance",
            "Probability % (Jail Short)":0.865,
            "Rank":40,
            "Probability % (Jail Long)":0.8152
         },
         "averageProbability":0.8401000000000001
      },
      {
         "name":"Free Parking",
         "id":"freeparking",
         "group":"Special",
         "rel":{
            "Square":"Free Parking",
            "Probability % (Jail Short)":2.8836,
            "Rank":5,
            "Probability % (Jail Long)":2.8253
         },
         "averageProbability":2.85445
      },
      {
         "name":"Community Chest",
         "id":"communitychest",
         "group":"Special",
         "rel":{
            "Square":"Community Chest",
            "Probability % (Jail Short)":1.8849,
            "Rank":37,
            "Probability % (Jail Long)":1.775
         },
         "averageProbability":1.82995
      },
      {
         "name":"Go To Jail",
         "id":"gotojail",
         "group":"Special",
         "rel":{
            "Square":"Go To Jail",
            "Probability % (Jail Short)":0,
            "Rank":41,
            "Probability % (Jail Long)":0
         },
         "averageProbability":0
      },
      {
         "name":"Luxury Tax",
         "id":"luxerytax",
         "group":"Special",
         "averageProbability":2.116
      }
   ],
   "tiles":[
      {
         "id":"go"
      },
      {
         "id":"mediterraneanave"
      },
      {
         "id":"communitychest"
      },
      {
         "id":"balticave"
      },
      {
         "id":"incometax"
      },
      {
         "id":"readingrailroad"
      },
      {
         "id":"orientalave"
      },
      {
         "id":"chance"
      },
      {
         "id":"vermontave"
      },
      {
         "id":"connecticutave"
      },
      {
         "id":"jail"
      },
      {
         "id":"stcharlesplace"
      },
      {
         "id":"electriccompany"
      },
      {
         "id":"statesave"
      },
      {
         "id":"virginiaave"
      },
      {
         "id":"pennsylvaniarailroad"
      },
      {
         "id":"stjamesplace"
      },
      {
         "id":"communitychest"
      },
      {
         "id":"tennesseeave"
      },
      {
         "id":"newyorkave"
      },
      {
         "id":"freeparking"
      },
      {
         "id":"kentuckyave"
      },
      {
         "id":"chance"
      },
      {
         "id":"indianaave"
      },
      {
         "id":"illinoisave"
      },
      {
         "id":"borailroad"
      },
      {
         "id":"atlanticave"
      },
      {
         "id":"ventnorave"
      },
      {
         "id":"waterworks"
      },
      {
         "id":"marvingardens"
      },
      {
         "id":"gotojail"
      },
      {
         "id":"pacificave"
      },
      {
         "id":"northcarolinaave"
      },
      {
         "id":"communitychest"
      },
      {
         "id":"pennsylvaniaave"
      },
      {
         "id":"shortlinerailroad"
      },
      {
         "id":"chance"
      },
      {
         "id":"parkplace"
      },
      {
         "id":"luxerytax"
      },
      {
         "id":"boardwalk"
      }
   ],
   "chance":[
      {
         "title":"Advance to Go (Collect $200)",
         "action":"move",
         "tileid":"go"
      },
      {
         "title":"Advance to Illinois Avenue - If you pass Go, collect $200",
         "action":"move",
         "tileid":"illinoiseave"
      },
      {
         "title":"Advance to St. Charles Place - If you pass Go, collect $200",
         "action":"move",
         "tileid":"stcharlesplace"
      },
      {
         "title":"Advance token to nearest Utility. If unowned, you may buy it from the Bank. If owned, throw dice and pay owner a total ten times the amount thrown.",
         "action":"movenearest",
         "groupid":"utility",
         "rentmultiplier":10
      },
      {
         "title":"Advance token to the nearest Railroad and pay owner twice the rental to which he/she is otherwise entitled. If Railroad is unowned, you may buy it from the Bank.",
         "action":"movenearest",
         "groupid":"railroad",
         "rentmultiplier":2
      },
      {
         "title":"Bank pays you dividend of $50",
         "action":"addfunds",
         "amount":50
      },
      {
         "title":"Get out of Jail Free - This card may be kept until needed, or traded/sold",
         "action":"jail",
         "subaction":"getout"
      },
      {
         "title":"Go Back 3 Spaces",
         "action":"move",
         "count":-3
      },
      {
         "title":"Go to Jail - Go directly to Jail - Do not pass Go, do not collect $200",
         "action":"jail",
         "subaction":"goto"
      },
      {
         "title":"Make general repairs on all your property - For each house pay $25 - For each hotel $100",
         "action":"propertycharges",
         "buildings":25,
         "hotels":100
      },
      {
         "title":"Pay poor tax of $15",
         "action":"removefunds",
         "amount":15
      },
      {
         "title":"Take a trip to Reading Railroad - If you pass Go, collect $200",
         "action":"move",
         "tileid":"readingrailroad"
      },
      {
         "title":"Take a walk on the Boardwalk - Advance token to Boardwalk",
         "action":"move",
         "tileid":"boardwalk"
      },
      {
         "title":"You have been elected Chairman of the Board - Pay each player $50",
         "action":"removefundstoplayers",
         "amount":50
      },
      {
         "title":"Your building loan matures - Collect $150",
         "action":"addfunds",
         "amount":50
      }
   ],
   "communitychest":[
      {
         "title":"Advance to Go (Collect $200)",
         "action":"move",
         "tileid":"go"
      },
      {
         "title":"Bank error in your favor - Collect $200 ",
         "action":"addfunds",
         "amount":200
      },
      {
         "title":"Doctor fee - Pay $50",
         "action":"removefunds",
         "amount":50
      },
      {
         "title":"From sale of stock you get $50",
         "action":"addfunds",
         "amount":50
      },
      {
         "title":"Get Out of Jail Free",
         "action":"jail",
         "subaction":"getout"
      },
      {
         "title":"Go to Jail - Go directly to jail - Do not pass Go - Do not collect $200",
         "action":"jail",
         "subaction":"goto"
      },
      {
         "title":"Grand Opera Night - Collect $50 from every player for opening night seats",
         "action":"addfundsfromplayers",
         "amount":50
      },
      {
         "title":"Holiday Fund matures - Receive $100",
         "action":"addfunds",
         "amount":100
      },
      {
         "title":"Income tax refund - Collect $20",
         "action":"addfunds",
         "amount":20
      },
      {
         "title":"Life insurance matures - Collect $100",
         "action":"addfunds",
         "amount":100
      },
      {
         "title":"Pay hospital fees of $100",
         "action":"removefunds",
         "amount":100
      },
      {
         "title":"Pay school fees of $150",
         "action":"removefunds",
         "amount":150
      },
      {
         "title":"Receive $25 consultancy fee",
         "action":"addfunds",
         "amount":25
      },
      {
         "title":"You are assessed for street repairs - $40 per house - $115 per hotel",
         "action":"propertycharges",
         "buildings":40,
         "hotels":115
      },
      {
         "title":"You have won second prize in a beauty contest - Collect $10",
         "action":"addfunds",
         "amount":10
      },
      {
         "title":"You inherit $100",
         "action":"addfunds",
         "amount":100
      }
   ]
};

Förderband“ mit d3.nest() bauen

var propertyNest = d3.nest()

d3.keys() einbauen um die Punkte am „Förderband“ zu definieren, bei denen die Umformung eingreifen soll

  • die verschiedenen Monopoly-Farben sind in der Property „groups“ eingebunden
propertyNest.key(function(d){return d.group})

Um d3.nest() zu aktivieren, müssen wir einen Einstiegspunkt definieren, praktisch die Stelle die oberhalb der keys liegt, aber unterhalb des data-Objektes

propertyNest.entries(data.properties)

Als Ergebnis erhalten wir 11 Objekte:

(11) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {key: "Purple", values: Array(2)}
1: {key: "lightgreen", values: Array(3)}
2: {key: "Violet", values: Array(3)}
3: {key: "Orange", values: Array(3)}
4: {key: "Red", values: Array(3)}
5: {key: "Yellow", values: Array(3)}
6: {key: "darkgreen", values: Array(3)}
7: {key: "darkblue", values: Array(2)}
8: {key: "Utilities", values: Array(2)}
9: {key: "Railroad", values: Array(4)}
10: {key: "Special", values: Array(8)}
length: 11
__proto__: Array(0)