How can I choose an object key at random?

后端 未结 3 586
余生分开走
余生分开走 2021-01-15 23:14

I have the following code;

namedarray[\'India\']=\'New Delhi\';
namedarray[\'Australia\']=\'Canberra\';
namedarray[\'Indonasia\']=\'Jakarta\';
namedarray[\'I         


        
相关标签:
3条回答
  • 2021-01-15 23:24

    Try this:

    function fetch_random(obj) {
        var temp_key, keys = [];
        for(temp_key in obj) {
           if(obj.hasOwnProperty(temp_key)) {
               keys.push(temp_key);
           }
        }
        return obj[keys[Math.floor(Math.random() * keys.length)]];
    }
    
    var random_name = fetch_random(namedarray);
    document.getElementById('question').innerHTML="Q." + random_name +"  is capital for which country"
    
    0 讨论(0)
  • 2021-01-15 23:43

    I would just use two arrays for the data.

    var countries = ['India', 'Australia', 'Indonasia', ... ];
    var capitols = ['New Delhi', 'Canberra', 'Jakarta', ...];
    

    Then insert into your text with:

    var index = Math.floor(Math.random() * capitols.length);
    document.getElementById('question').innerHTML="Q." +capitols[index]+"  is capital for which country";
    

    You can then use the index variable to look up the answer later on as well.

    0 讨论(0)
  • 2021-01-15 23:45

    If you are capable of using libraries, you may find that Lo-Dash JS library has lots of very useful methods for such cases. In this case, go ahead and check sample().

    (Note Lo-Dash convention is naming the library object _. Don't forget to check installation in the same page to set it up for your project.)

    _.sample([1, 2, 3, 4]);
    // → 2
    

    In you case, go ahead and use:

    _.sample(namedarray)
    

    and in context:

    document.getElementById('question').innerHTML="Q." +_.sample(namedarray)+"  is capital for which country";
    

    On a side note, you could use a simpler notation for populating the array.

    namedarray = {
        India : 'New Delhi',
        Australia : 'Canberra',
        Indonasia : 'Jakarta',
        Iran : 'Tehrani',
        Iraq : 'Bhagdad',
        Nijeria : 'Abuja'
    }
    
    0 讨论(0)
提交回复
热议问题