【问题标题】:Randomly choose 3 non repeating numbers from array length [duplicate]从数组长度中随机选择3个不重复的数字[重复]
【发布时间】:2021-03-18 21:17:32
【问题描述】:

目前我有一个数组,其中包含大量对象。目前有 21 个,尽管这可能随时增加或减少。

要遍历数组并生成所需的内容,我使用以下代码:

for (let i = 0; i < projects.length; i++) { 
    let imagesString = projects[i].images.reduce((acc,image,ind)=>{
        if (ind==0) return acc;
    return acc +'<a href="' + projects[i].imagelocation + image + '" data-fancybox="' + projects[i].fancybox + '" data-caption=" ' + projects[i].description + '"></a>'},"");

    content += '<div class="galleryitem col-lg-4 col-md-4 col-sm-6 ' + projects[i].category + '"><a href="' + projects[i].imagelocation + projects[i].images[0] + '" data-fancybox="' + projects[i].fancybox + '" data-caption=" ' + projects[i].description + '"><div class="h_gallery_item"><div class="g_img_item"><i class="fas fa-expand expand"></i><img class="img-fluid" src="' + projects[i].imagelocation + projects[i].thumbnail + '" alt="' + projects[i].name + ' - ' + projects[i].subheading + '"></div><div class="g_item_text"><h4>' + projects[i].name + '</h4><p>' + projects[i].subheading + '</p></div></div></a>'+imagesString+'</div>';    
}

在网络应用程序的不同部分,我想让它从这个数组中选择 3 个随机的非重复对象并通过循环运行来显示它们,但我需要我是 3 而不是 let i = 0; i &lt; projects.length; i++来自projects.length 的随机非重复数字。

【问题讨论】:

  • 随机播放projects,然后从该随机数组中取出前三项。
  • 嗨@CBroe 我以前没有使用过随机播放,你能告诉我如何做到这一点,或者链接我了解随机播放功能的工作原理吗?
  • 在您选择的搜索引擎,甚至本网站顶部的搜索字段中输入“javascript array shuffle”,可以立即将您带到stackoverflow.com/questions/2450954/…
  • @CBroe 让它与您的随机播放建议一起使用。我第一次使用它,不知道这是一个东西。以为我必须math.random,但不知道如何防止重复。谢谢。

标签: javascript arrays loops random


【解决方案1】:

Sooo,这对我有用:

let threeProjects = [];
for(let j = 0; j <3; j++) {
    let value = Math.floor(Math.random() * projects.length);
    if (!threeProjects.includes(value)) {
        threeProjects.push(value)
    } else {
      j--
    }
};

【讨论】:

  • 这只是“掷骰子”几次,但并不能确保这些数字是唯一的。
  • 是的,抱歉,我确实按了添加评论而不想要它:D
  • 我将尝试我所做的编辑,因为我不知道它是否有效,但让我们看看:D
  • 所以,我对它做了一些修复(比如添加一个空数组的第一个声明),它对我有用。请随时告诉我它对您的工作方式以及是否适合您:)
  • 如果您的项目数量少于 3 个,它将无法工作。如果你这样做,可能会做一个无限循环:D
【解决方案2】:
const arr = []         // Your Object array
const randIndices = [] // Array of 3 random indices between 0 - arr.length
for(let i = 0; i < 3; i++) {
   randIndices.push(Math.floor(Math.random() * arr.length))
}

console.log(randIndices)

编辑: 这对于较小的数组确实有很大的重复变化,但会随着数组长度的增长而改善。

【讨论】:

  • 这也只是“掷骰子”几次,但并不能确保这些数字是唯一的。
  • 没错,这将对较小的数组的重复次数产生很大的变化,但会随着数组长度的增长而改善。我已将此添加到答案中。
猜你喜欢
  • 2023-01-11
  • 2016-02-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多