【问题标题】:How to select an random index from randomly selected object?如何从随机选择的对象中选择随机索引?
【发布时间】:2017-10-24 09:55:58
【问题描述】:

我想从一个数组对象中选择一个随机索引,这个对象包含两个键作者和图像数组。我可以从数组对象中选择一个随机索引,但是我如何也可以根据图像数组从图像数组中选择一个随机索引随机选择的数组对象索引?

    let resourcesObject = [
      {
        "author" : "photographer1",
        "images1": ['cat1','cat2','cat3'] 

      },
      {
        "author" : "photographer2",
        "images2": ['dog1', 'dog2', 'dog3', 'dog4'] 

      }

      ];

    console.log(resourcesObject[Math.floor(Math.random() * resourcesObject.length)]); // gives me a random object as expected { author: 'photographer2',images2: [ 'dog1', 'dog2', 'dog3', 'dog4' ] }, //but i also want to select a random index from the images2 how would i do that?

【问题讨论】:

  • 在变量上保存 resourcesObject[Math.floor(Math.random() * resourcesObject.length)] 并使用该变量来查找随机索引
  • 这样? console.log(savedIndex.images1[Math.floor(Math.random() * 3)]); 但如果它是包含 images2 的另一个对象,那将是一个错误或者我做错了?

标签: javascript arrays json object random


【解决方案1】:

希望对您有所帮助! 它对我很有用:

var resourcesObject = [
        {
            "author" : "photographer1",
            "images1": ['cat1','cat2','cat3']

        },
        {
            "author" : "photographer2",
            "images2": ['dog1', 'dog2', 'dog3', 'dog4']

        }
    ];


    function randomize(n){
        return Math.floor(Math.random() * n);
    }

    var n = resourcesObject.length;
    var randomIndex = randomize(n);
    var selectedObj = resourcesObject[randomIndex]['images' + (randomIndex + 1)];
    var randomImg = selectedObj[(Math.floor(Math.random() * selectedObj.length))];

    console.log(randomImg);

【讨论】:

    【解决方案2】:

    这给出了随机对象

    <!DOCTYPE html>
    <html>
    <body>
    
    <p>Looping through arrays inside arrays.</p>
    
    <p id="demo"></p>
    
    <script>
    
    var myObj;
    myObj = [
      {
        "author" : "photographer1",
        "images1": ['cat1','cat2','cat3'] 
    
      },
      {
        "author" : "photographer2",
        "images2": ['dog1', 'dog2', 'dog3', 'dog4'] 
    
      }
    
      ]
    
    
    document.getElementById("demo").innerHTML = myObj[Math.floor(Math.random() * 2) + 0  ];
    
     </script>
    
     </body>
     </html>
    

    【讨论】:

      【解决方案3】:

      这是一个将功能提取到一个小函数中以根据数组长度选择索引的完美示例

      function getRandomIndex( array ) {
        return parseInt( Math.random() * array.length );
      }
      

      然后你可以用作:

      let resourcesObject = [
        {
          "author" : "photographer1",
          "images1": ['cat1','cat2','cat3'] 
      
        },
        {
          "author" : "photographer2",
          "images2": ['dog1', 'dog2', 'dog3', 'dog4'] 
      
        }
      ];
      
      let resourceIndex = getRandomIndex( resourcesObject );
      // is images part of the index, or is there a reason to have images1 or images2
      let imageProp = 'images' + (resourceIndex + 1);
      let imageIndex = getRandomIndex( resourcesObject[resourceIndex][imageProp] );
      
      let image = resourcesObject[resourceIndex][imageProp][imageIndex];
      

      如果图像在 images1 或 images2 中,您可以自己做一些更容易的事情

      let imageArray = resourcesObject[resourceIndex].images1 || resourcesObject[resourceIndex].images2;
      

      这将选择 2 中的任何一个,然后您可以使用 imageArray 代替

      【讨论】:

        【解决方案4】:

        let resourcesObject = [
              {
                "author" : "photographer1",
                "images1": ['cat1','cat2','cat3'] 
        
              },
              {
                "author" : "photographer2",
                "images2": ['dog1', 'dog2', 'dog3', 'dog4'] 
        
              },
                {
                "author" : "photographer3",
                "images3": ['rat1', 'rat2', 'rat3', 'rat4'] 
        
              },
                {
                "author" : "photographer4",
                "images4": ['bat1', 'bat2', 'bat3', 'bat4'] 
        
              }
        
              ];
        
            let obj=resourcesObject[Math.floor(Math.random() * resourcesObject.length)];
            let value=Object.keys(obj)[1];
             console.log(obj[value][Math.floor(Math.random() * obj[value].length)])

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-21
          • 1970-01-01
          • 1970-01-01
          • 2011-02-01
          相关资源
          最近更新 更多