【问题标题】:How to generate a random number from an array using Javascript?如何使用 Javascript 从数组中生成随机数?
【发布时间】:2020-06-19 17:29:31
【问题描述】:

我正在尝试从数组中生成一个随机 SKU 编号。使用 Math.floor() 和 Math.random() 获取索引。但它只返回一个字母或数字,而不是整个字符串。这是函数:

function bookRentData(bookData) {

   bookData.forEach((book) => {

      //generate random sku number

      const sku = book.sku
      var random = sku[Math.floor(Math.random() * sku.length - 1)];
      document.getElementById("message").innerHTML = sku[random];   

      });
        wrap.innerHTML += `<tr>
                             <td>${book.sku}</td>
                             <td>${book.price}</td>
                          </tr>`
   }

预期输出:101ZS536

当前输出:Z

// example of the data 

         [{sku: '101ZS536',
            price: 4.37
          },
          {
            sku: '10134QYT',
            price: 42.61
          },
          {
            sku: '10134QYT',
            price: 53.31
          },
          {
            sku: '10134QYT',
            price: 0
          },
          {
            sku: '10134QYT',
            price: 3.46
          }
        ]

任何意见或建议将不胜感激。

【问题讨论】:

  • 什么是bookData?为什么使用.forEach()book.sku/sku 是什么?如果你回答了所有这些问题,你应该找到问题的根源。
  • 它返回z,因为sku 值设置为等于[1,0,1,Z,S,5,3,6]。即book.sku的值
  • @Andreas bookData 保存整个数据,.forEach() 遍历数据中的每个对象,book.sku 从每个对象返回每个书籍 sku 编号。我正在尝试随机检索其中 1 个 sku 号码。

标签: javascript


【解决方案1】:

检查这是否满足您的方案。

function bookRentData() {
var bookData =  [{sku: '101ZS536',
            price: 4.37
          },
          {
            sku: '10134QYT',
            price: 42.61
          },
          {
            sku: '10134QXT',
            price: 53.31
          },
          {
            sku: '10134QZT',
            price: 0
          },
          {
            sku: '10134QST',
            price: 3.43
          },
           {
            sku: '10134QCT',
            price: 3.46
          },
           {
            sku: '10134QYT',
            price: 3.1
          },
           {
            sku: '10134QYT',
            price: 3.2
          },
           {
            sku: '10134QBT',
            price: 3.6
          },
           {
            sku: '10134QYT',
            price: 3.5
          },
          {
            sku: '10134QJT',
            price: 3.1
          },
           {
            sku: '10134QYT',
            price: 3.2
          },
           {
            sku: '10134QRT',
            price: 3.6
          },
           {
            sku: '10134QKT',
            price: 3.5
          }
          
        ];
   book = bookData[Math.floor(Math.random() * bookData.length)]
   var x = document.getElementById("demo")
   x.innerHTML = book.sku;
       
}
<!DOCTYPE html>
<html>
<body>

<p>Test</p>

<button onclick="bookRentData()">Try it</button>

<p id="demo"></p>

【讨论】:

  • 谢谢,但这会返回一个完整的对象。我只是想从对象数组中检索 SKU 编号。在这种情况下,10134QYT。稍后,我会更新价格。
  • 您可以从对象中获取 SKU 编号,对吗?检查更新的 sn-p
【解决方案2】:

这是一个简单易读的答案,它使用rando.js 从数组中访问一个随机值,然后访问该对象的 sku:

var arr = [
  {sku: '123ZS536', price: 4.37},
  {sku: '45634ABC', price: 42.61},
  {sku: '10134DEF', price: 53.31},
  {sku: '78934GHI', price: 0},
  {sku: '10134QYT', price: 3.46}
];

console.log( rando(arr).value.sku );
&lt;script src="https://randojs.com/1.0.0.js"&gt;&lt;/script&gt;

如果您想使用此代码,请不要忘记将该脚本标记放在 html 文档的头部。

【讨论】:

    【解决方案3】:

    也许这会起作用:

    function bookRentData(bookData) {
       book = bookData[Math.floor(Math.random() * bookData.length - 1)]
    
            wrap.innerHTML += `<tr>
                                 <td>${book.sku}</td>
                                 <td>${book.price}</td>
                              </tr>`
    }
    

    我假设您需要列表中的单个sku,因为您需要一个随机的。 (如果你想要全部,那么就不需要它们是随机的。)

    如果我没有正确理解您的问题,请附上评论

    【讨论】:

    • 返回整个对象。我只是想获取 SKU 编号。谢谢!
    • 是的 book 是一个对象,但您的内部 html 将没有。只有book.sku
    【解决方案4】:

    您有Math.floor(Math.random() * sku.length - 1),有时可能会返回-1

    要生成一个介于 0 到长度之间的数字,您可以更改为:

          var random = sku[Math.floor(Math.random() * sku.length)];
    
    

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2016-04-27
      • 2016-03-27
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多