Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从将数组的输出随机化的函数中排除输出?

如何从将数组的输出随机化的函数中排除输出?
EN

Stack Overflow用户
提问于 2019-10-04 19:46:30
回答 4查看 59关注 0票数 1

我对JavaScript是个新手,所以请耐心听我说。我正在尝试随机化事件侦听器函数的结果。当元素(元素中的div)在那里被单击时,应该会将颜色更改为集合中的随机颜色。它们会改变颜色,但不会变成不同的颜色。有时,因为它是随机的,所以它会“改变”成相同的颜色。我真的不希望这样的事情发生。

我尝试的是创建一个函数来选择一个颜色,然后检查这个颜色是否已经被‘使用’了,但是它不起作用,因为在一个函数中有多个函数,它们没有正确地交互,或者我不知道如何访问它们。

我还尝试了,创建名为b=[]的第二个数组,然后添加当前颜色,然后检查随机颜色是否存在,以及是否再次运行该函数以生成新的随机颜色。

代码语言:javascript
运行
AI代码解释
复制
ad = document.querySelectorAll(".all div")
colors = ['yellow', 'red', 'blue', 'cornsilk']

ad.forEach((f, index) =>{
    var cc = ad[index].style.backgroundColor;
    f.addEventListener('click', ()=>{
      function makeColor(cc){
        newColor = colors[Math.floor(Math.random()*colors.length)]
        if (newColor == cc){
          makeColor();
        }
        else{
          return newColor;
        };
      };
      var a = makeColor();
      ad[index].style.backgroundColor = newColor;
    });
  });
// this almost works. It changes the colours but not to different ones.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-04 19:55:49

您可以使用集合来跟踪使用的颜色,重新拾取颜色直到未使用的颜色,然后添加新颜色以设置和删除原始颜色。

代码语言:javascript
运行
AI代码解释
复制
ad = document.querySelectorAll(".all div")
colors = ['yellow', 'red', 'blue', 'cornsilk']
const used = new Set() // track used colors

ad.forEach((f, index) => {
  f.addEventListener('click', () => {
    function makeColor(cc) {
      newColor = colors[Math.floor(Math.random() * colors.length)]
      // repick until unused color
      while (used.has(newColor)) newColor = colors[Math.floor(Math.random() * colors.length)]
    };
    // current color
    var cc = ad[index].style.backgroundColor;
    var a = makeColor();
    ad[index].style.backgroundColor = newColor;
    used.add(newColor); // add new color to set
    used.delete(cc); // remove old color from set
  });
});
代码语言:javascript
运行
AI代码解释
复制
<div class="all">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2019-10-04 20:11:14

首先在全局范围内声明函数。do ... while循环可能是一种解决方案。

代码语言:javascript
运行
AI代码解释
复制
ad = document.querySelectorAll(".all div")
colors = ['yellow', 'red', 'blue', 'cornsilk']

ad.forEach((f, index) => {
  f.addEventListener('click', (el) => {
    ad[index].style.backgroundColor = makeColor(el.currentTarget.style.backgroundColor);
  });
});

function makeColor(cc) {
  if (colors.length) {
    var newColor = colors[Math.floor(Math.random() * colors.length)];
    colors.splice(colors.indexOf(newColor), 1);
    if (cc) colors.push(cc);
    return newColor;
  }
  else {
    return cc;
  }
};
代码语言:javascript
运行
AI代码解释
复制
.all {
  display: flex;
}

.all div {
  margin: 2px;
  width: 100px;
  height: 100px;
  border: 1px solid #666;
}
代码语言:javascript
运行
AI代码解释
复制
<div class="all">
  <div></div>
  <div></div>
  <div></div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2019-10-04 20:14:28

这比你做的要简单得多。在使用它之后只需初始化,而不是循环并在每个元素上设置事件,只需在父元素上设置它,然后使用event.target访问remove the color from the array元素。

另外,确保你总是声明你的变量。

代码语言:javascript
运行
AI代码解释
复制
let ad = document.querySelector(".all");
let colors = ['yellow', 'red', 'blue', 'cornsilk'];
let newColor = "";

ad.addEventListener('click', function makeColor(event){
  if(colors.length){
    newColor = colors[Math.floor(Math.random() * colors.length)];
    event.target.style.backgroundColor = newColor;
  
    // Simply remove the used color from the array so it can be used again
    colors.splice(colors.indexOf(newColor),1);
    console.log(colors.join());
  } else {
    console.log("No more colors to pick from!");
  }
});
代码语言:javascript
运行
AI代码解释
复制
<div class="all">
  <div>Item</div>
  <div>Item</div>
  <div>Item</div>
  <div>Item</div>  
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58242390

复制
相关文章
OneNote Extension-Main API
Environment Setup Main API Usage Host-Specfic API Usage Environment Setup Official Guide Main API Usage There are 2 types of main API: host-specific API: able to access oneNote related contents, such as section, page details Common API: able to acces
szhshp
2022/09/21
2630
【OneNote Mobile】 如何Email便签
利用Windows Phone 7手机的OneNote Mobile,用户可以随时以文字、图片或者录音来记录灵感,并通过Windows Live SkyDrive与SharePoint Server
ShiJiong
2018/01/10
1.4K0
【OneNote Mobile】 如何Email便签
如何利用oneNote钓鱼?
拿到了两个One Note的钓鱼样本。以为是个OneNote的0day,这不得分析分析搞一手。就花了点时间分析了一下,并且成功复现了手法。
Gamma实验室
2023/02/22
9620
如何利用oneNote钓鱼?
OneNote 深度评测:使用教程、插件、模版
介绍:提供 20+ 插件 1000+ 功能用于扩展各平台 OneNote (Windows, MAC, Android)。其中包括批量处理器、提醒工具、思维导图、搜索工具栏强化、表格强化等插件。
数字花园
2022/07/06
2.9K0
OneNote 深度评测:使用教程、插件、模版
【OneNote Mobile】 如何处理便签内容的格式?
利用Windows Phone 7手机的OneNote Mobile,用户可以随时以文字、图片或者录音来记录灵感,并通过Windows Live SkyDrive与SharePoint Server
ShiJiong
2018/01/10
2.1K0
【OneNote Mobile】 如何处理便签内容的格式?
OneNote 正在被更多的攻击者使用
随着微软默认禁用宏代码策略的生效,越来越多的攻击者开始使用 OneNote 文档来分发恶意软件。本文介绍了几个使用 OneNote 文档的案例,展示了攻击者如何使用该类文件进行攻击。 为什么选择 OneNote 由于 OneNote 使用范围很广、用户对该类文件缺乏安全意识和保护措施,OneNote 文档对于攻击者来说已经成为越来越有吸引力的攻击载体。攻击者利用混淆内容与 OneNote 的受信任身份来进行攻击,这种转变的具体原因包括: 安全措施的增强:由于对基于宏代码的攻击认识不断提高,许多组织已经采取了
FB客服
2023/03/29
1.2K0
OneNote 正在被更多的攻击者使用
Microsoft OneNote 2019 for Mac v16.73 beta中文版
Microsoft OneNote 2019 是一款笔记和信息管理应用程序,是 office 2019 套件中的一部分。它可以帮助用户轻松地收集、组织、共享和查找各种类型的信息,适用于各类用户。
皮西歪
2023/04/28
7170
Microsoft OneNote 2019 for Mac v16.73 beta中文版
我的笔记系统
一个好的笔记系统,应该能把你所学习到的任何资料串联起来,形成一个知识系统,在你需要他们的时候,可以很容易找到,进而形成自己新的知识。
ThoughtWorks
2020/12/22
1.5K0
我的笔记系统
【杂谈】想成为机器学习学霸?先学会做笔记吧
话不多说,上标准。以下我总结了身边学编程的小哥哥们和小姐姐们对云笔记app的几类需求:
用户1508658
2019/07/28
2K0
好看、好用、强大的手写笔记软件综合评测:Notability、GoodNotes、MarginNote、随手写、Notes Writers、FlowUs
与普通的笔记编辑器相比,手写笔记软件相对少一些。其中,比较出名的并不多。下面介绍一些比较主流、备受好评的,兼具有好看、好用、强大等特点的手写笔记软件。其中,首先介绍传统被忽略的两款笔记软件 OneNote 和 苹果备忘录。随后测评了包括 Notability、GoodNotes、MarginNote、随手写、Notes Writers、CollaNote、CollaNote、Prodrafts、Noteshelf、FlowUs.
数字花园
2022/07/03
10.7K0
好看、好用、强大的手写笔记软件综合评测:Notability、GoodNotes、MarginNote、随手写、Notes Writers、FlowUs
工程师的秘密武器—极简高效的笔记习惯
哈喽,欢迎回来,《工程师的秘密武器》系列文章篇三:《建立高效的笔记习惯》。我们前面谈了两个话题,一个是选择合适的笔记工具(电气工程师的秘密武器—完整的知识体系,你有吗?),另一个是设计合理的笔记结构(打造电气工程师笔记模板—搭建专业知识体系),在前面的内容给广大电气工程师建议了一款笔记软件OneNote,也梳理了一个适用于日常工作的笔记结构模板。作为前面内容的完结篇,我们今天要聊的是如何利用OneNote笔记一些技巧和方法建立高效的笔记习惯,让相互关联的专业知识或琐碎技术细节得以记录,实现我们建立个人专业知识体系这一目标。
剑指工控
2023/08/31
2940
工程师的秘密武器—极简高效的笔记习惯
免费、强大、高颜值的笔记软件评测: OneNote、Heptabase、氢图、FlowUs
OneNote 的强大与自由,很大程度上便是由类似白板的画布体验所赋予的。那么,推荐你试用 Heptabase.
数字花园
2022/06/28
2.2K0
免费、强大、高颜值的笔记软件评测: OneNote、Heptabase、氢图、FlowUs
效率工具 & 软件推荐
Windows Android Mac IOS Windows Browser Microsoft New Edge Chrome 已经完全被 Microsoft New Edge 替代 Browser Extensions AdBlock 在设置页面可以直接订阅中国区域的 blacklist TamperMonkey Nimbus Screenshot SingleFile 可以将网站保存为单个文件 Proxy SwitchyOmega Katalon Recorder OneTab
szhshp
2022/08/15
8610
将一个CentOS环境复制到另一个CentOS
「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」。
Java廖志伟
2022/03/07
5840
将一个CentOS环境复制到另一个CentOS
javaSE之如何将一个文件复制到另一个文件
1 /* 2 * (1). 文件字符输入,输出流 3 * 文件字节输入,输出流的read和write方法使用 4 * 字节数组读写数据,即以字节为单位处理数据,因此,字节流不能很好的操作Unicode字符 5 * ,比如,一个汉字在文件中占用2个字节,如果使用字节流,读取不当会出现“乱码”现象 6 * (2).字符输入流和输出流的read和write方法 7 * 使用字符数组读写数据,即以字符为基本单位处理数据 8 * 9
Gxjun
2018/03/22
1.7K0
将一个CentOS环境复制到另一个CentOS
将一个CentOS环境复制到另一个CentOs,实现环境迁移或备份的功能 将CentOS2复制一份新的CentOS3出来,步骤如下: 创建新的CentOS3 这里的名称改吃CentOS3,后面的文件改名就是对应的这个名称 ISO映像文件路径修改,每个CentOS单独用一个ISO映像文件 直接启动 修改网络ip cd /etc/sysconfig/network-scripts/ vi ifc
Java廖志伟
2022/09/29
1.6K0
将一个CentOS环境复制到另一个CentOS
你用什么软件做笔记?
出处:makeuseof.com/tag/best-note-taking-tools-programmers/
好好学java
2019/11/22
2.8K0
你用什么软件做笔记?
7大笔记应用,让你的代码效率翻7倍
但是大多数笔记应用的设计并不是以程序员作为目标受众,这些程序可能会让使用者用起来很难受,甚至完全放弃这些工具。这就是为什么我们为你找来了这些最好的笔记工具。快来看看——你会爱上它们的!
IT阅读排行榜
2018/08/16
1.3K0
HDFS——如何将文件复制到HDFS
在Hadoop中用作文件操作的主类位于org.apache.hadoop.fs包中。基本的文件操作有open、read、write和close。实际上,Hadoop的文件API是通用的,可用于HDFS以外的文件系统。
星哥玩云
2022/06/30
2.1K0
点击加载更多

相似问题

使用Graph API更新OneNote页面

14

如何用Python使用Onenote MS Graph创建页面

12

如何使用onenote API将onenote页面设置为只读

114

MS Graph Onenote获取Notebooks的问题

11

如何使用Microsoft Graph API更新onenote页面的墨迹数据

144
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档