首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原生JS | 随机抽取不重复的数组元素 —— 有没有更好的方法?

HTML5学堂-码匠:从数组中随机抽取不重复的元素,构成新数组,拥有多种方法,来看看你用的方法性能如何? 效果的功能需求 从一个数组当中,随机抽取数个元素,构成新数组,要求这些元素不能重复。...方法1:较为“传统”的实现方法 基本实现思路 从第二次随机抽取的元素开始,需要将抽取的元素与当前新数组的已抽取元素相比较,如果相同,则重新抽取,并再次执行比较的操作。...,但编写复杂度较高,执行效率上来说很低,随着元素的抽取,要比较的次数越来越多,“失败的抽取”概率越来越大,整体效率低下。...随着比较的进行,每次被抽取的元素都被交换到了数组末端,再被扔掉,数组长度也越来越短。...方法实现难度与执行效率分析 这种方法不太容易想到,但它的编写复杂度是三者中最低的,而性能也是最好的,由于每次比较之后,都将已抽取的元素删除了,因此并不会出现失败的抽取,更不需要做什么比较了。

9.4K50

JS中数组随机排序实现(原地算法sortshuffle算法)

compare(a,b)中,a、b都是比较参数,当a-b>0 ,交换位置a-b=0,位置不变a-b随机排序我们都会想到Math的random方法,具体实现如下,但是这样操作确有缺陷,理论很丰满...1、方法一(不推荐)arr.sort(() => Math.random() - 0.5)缺陷:chrome浏览器对于数组长度为10以内的使用插入排序,反之则为快速排序和插入排序的组合,故而并不能做到随机分布...1、换牌逻辑:从一副牌中抽取一张,与最后一张牌进行交换,放到最后证明该牌已经被随机抽选过,而被交换的牌就排在前面,就有机会被继续抽选。...随机抽取一张抽取的放置到最后位置最后位置的牌放置在随机抽取的位置let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14];funtion shuffle...,要除去这张牌,然后在剩下的牌中继续抽 } return temp}shuffle(arr)抽取的牌放置旁边在抽取的那副牌冲除去随机抽取的那张牌附:本文用到的JS基础本文用到数组方法基本介绍splice

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)

    JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序(洗牌算法)、优化排序性能等,JS中排序算法的使用详解(附实际应用代码) 一、为什么要使用Array.sort(...2、返回值 Array.sort() 会按照比较器的规则修改原数组,直至排序完成,不会产生新的数组。...如果直接比较数字数组排序,会出现"10"比较第一位,再往后逐步推进,“1”在字符串中在“6”前面,"1"比较第二位了,所以"10"<"6"。...) 如果只是想排序数字数组,可以写一个简单的比较函数。...(洗牌算法) 实现数组的随机排序(伪随机)。

    22100

    注意力机制可解释吗?这篇ACL 2019论文说……

    研究者以两种方式将 i^∗的重要性与一些其他注意力项的重要性进行了比较、 模型输出分布的 JS 散度 研究者希望比较 i^∗对模型输出分布的影响与从 I 统一抽取的随机注意力项 r 对应的影响。...第一个方法是计算两个 JS 散度:一个是从只移除 i^∗后模型的原始输出分布到其原始输出分布的 JS 散度,另一个是只移除 r 后模型的输出分布的 JS 散度,并将它们进行比较。...图 9:利用前面给出的关于 i^∗的定义,与一个不同的随机选择注意力项进行比较,上图数字是所有模型上的四个测试集中的每个决策翻转指示器变量类别的测试实例百分比。...由于研究者要求随机项不能为 i^∗,他们从分析中排除了最终序列长度为 1 的所有实例。 在多数情况下,擦除 i^∗不会改变模型的决策(图中的「no」列)。...图 5:在三种模型架构上,在不同的排序方案下,第一次决策前被移除的项的分数分布发生翻转。

    47010

    注意力机制可解释吗?这篇ACL 2019论文说……

    研究者以两种方式将 i^∗的重要性与一些其他注意力项的重要性进行了比较、 模型输出分布的 JS 散度 研究者希望比较 i^∗对模型输出分布的影响与从 I 统一抽取的随机注意力项 r 对应的影响。...第一个方法是计算两个 JS 散度:一个是从只移除 i^∗后模型的原始输出分布到其原始输出分布的 JS 散度,另一个是只移除 r 后模型的输出分布的 JS 散度,并将它们进行比较。...图 9:利用前面给出的关于 i^∗的定义,与一个不同的随机选择注意力项进行比较,上图数字是所有模型上的四个测试集中的每个决策翻转指示器变量类别的测试实例百分比。...由于研究者要求随机项不能为 i^∗,他们从分析中排除了最终序列长度为 1 的所有实例。 在多数情况下,擦除 i^∗不会改变模型的决策(图中的「no」列)。...图 5:在三种模型架构上,在不同的排序方案下,第一次决策前被移除的项的分数分布发生翻转。

    53220

    Numpy库的简单用法(3)

    (4)排序 可以使用sort方法进行排序,与python内建的列表一样。...(5)唯一值与其他集合逻辑 numpy中包含一些关于集合的操作方法,有: 方法 描述 unique(x) 计算x的唯一值,并排序 intersect1d(x, y) 计算x和y的交集,并排序 union1d...numpy.random中的部分函数列表 函数 描述 seed 向随机数生成器传递随机种子 shuffle 随机排列一个序列 rand 从均匀分布中抽取样本 randint 从给定的由低到高范围抽取随机整数...randn 从均值为0,方差为1的正态分布中抽取样本 binomial 从二项分布中抽取样本 normal 从正态分布中抽取样本 beta 从beta分布中抽取样本 chisquare 从卡方分布中抽取样本...gamma 从伽马分布中抽取样本 uniform 从均匀[0, 1)分布中抽取样本 可以抽取几个常见的方法记住,其他的作为了解。

    45710

    如何写好JS代码

    造成这个结果的原因是,数组的sort方法内部是一个排序算法,我们不知道它的具体实现,但一般来说,排序算法用某种规则依次选取两个元素比较它们的大小,然后根据比较结果交换位置。...我们可以换种洗牌算法,实现每张牌出现在每个位置的概率都相同,先随机抽取一张牌和最后的交换,再从剩余的牌抽取一张和倒数第二个位置交换,直至牌抽取完。...eslint是统一项目规范很好的工具。 我们来看个npm包left-pad,因为代码风格等槽点导致作者下线npm包,然后引发一系列事件。left-pad事件?...如果判断的数字较小,我们可以利用刚转换成二进制数的特征和js的正则匹配来实现,具体代码如下:version4function isPowerOfFour(num){ num = parseInt(num...:00)*$/.test(num);}复制代码总结我们要真正写好JS代码,首先需要关注代码的正确性,保证程序在线上正常运行不出bug。

    1.9K30

    通过EXCEL模板题库进行随机组卷的一些设计思路

    (二)分类号:将某一类题型归于一个知识点片区,在这个片区里随机抽取题目。 (三)抽取数:在每一个分类号知识片区里设定抽取的题数(首行设定即可)。...(四)排序号:为每个题的唯一编号,及随机后的显示顺序。 (五)A/B/C/D:正确选项单元格的首字母填写 "T" ,否则填写 "F" 。多选单选到少要2个选项,判断必须为2个选项。...(六)E/F/G/H:这四个均为首字母为 "F" 的干扰项,即错误答案,可以设置也可以不设置。 (七)正确答案:只有判断题可以设置,其它的正确项均为随机生成。...(二)按分类号进行查询,通过平均机会抽取算法(点些参考我的算法文章)取出根据抽取数设定的记录数,并另设一个字典表,记录每一道题的抽取次数,抽取次数越少的越优先抽取。...(三)随机选题成功后,则在A/B/C/D四个选项里随机选择首字母为"T"的正确选项,选取的个数视题型而定,多选至少选2个(最多不超过正确项个数上限),单选选1个,其它题型则略过,如果有E/F/G/H也有值

    25110

    SAS随机抽样以及程序初始环境

    从总体中抽取样本的过程,称为抽样。 抽样包括随机抽样和非随机抽样。非随机抽样是从总体中抽取指定的个体,具有主观意向性,这里不做讨论。...随机抽样是按照随机原则,保证个体都有一定概率被抽取到的抽样方法。常见的随机抽样方式有:简单随机抽样、系统抽样、分层抽样、整群抽样、多阶段抽样、二重抽样以及比率抽样。...(1)简单随机抽样 简单随机抽样,指从总体中等概率地抽取出n个个体组成样本。在SAS中,可以使用surveyselect过程步来实现随机抽样。...过程步的基本格式如下: PROC SURVEYSELECT DATA= * 输入数据集; OUT= * 输出数据集; METHOD= * 抽样方法; SAMPSIZE= * 选择项指定需要抽样的样本量...SAS程序首先安装control中的变量排序,然后采用系统抽样抽取样本。

    1.5K30

    【SQL】进阶知识 -- 随机取数的几种方式

    在很多数据库开发和数据分析中,我们经常需要从大量数据中随机抽取一定数量的记录。比如,从一个客户表中随机选取4个客户进行抽奖,或者在进行数据分析时,想随机挑选几条数据进行查看。...一、什么是“随机取数”? 在SQL中,随机取数指的是从一个表中随机选取若干条记录。我们通常在以下场景中使用: 抽样分析 随机抽奖 随机显示一些推荐内容 那么,如何从数据库中随机抽取4条数据呢?...注意: RAND() 会为每一行生成一个随机数,排序时效率会比较低。如果你的数据量非常大,使用 RAND() 可能会带来性能问题。...抽样方法: 对于极其庞大的数据集,可以使用其他抽样方法(如分层抽样、系统抽样等)来优化随机抽取过程。 七、总结 今天我们介绍了如何在不同的数据库中进行随机取数操作。...无论是 MySQL、PostgreSQL、SQL Server 还是 Oracle,都有各自的随机函数,帮助我们实现快速随机抽取。

    15300

    经抽签:华为中标黑龙江省公安厅政务云项目

    2021年7月16日,黑龙江省公安厅政务云服务商采购项目竞争性磋商公告发布,预算一项为 0.10 元。...云头条经了解,此项目按实际使用量计费(先用后付、先审再付的原则进行结算),所以预算、中标金额一项显示 0.10 元。...目前各地常见的做法有以下几种: 报价或评分得分相同的供应商,采用随机抽取。 邀请招标中,随机抽取3家供应商参与投标。...评标委员会对投标文件进行符合性评审,从通过符合性评审的供应商中,采用随机抽取方式从中确定中标候选人。...评标委员会先对投标文件进行符合性检查,再进行打分评审,将投标人的得分从高到低排序,选名次靠前的3-5名投标人,采用随机抽取方式从中确定中标人。 资格预审中,对符合条件的供应商,随机抽取入围供应商。

    40110

    概率抽样方法简介

    概率抽样也称为随机抽样,指在总体中排除人的主观因素,给予每一个体一定的抽取机会的抽样。...其特点为,抽取样本具有一定的代表性,可以从调查结果推断总体;概率抽样方法主要分为以下几个类别: 1.简单随机抽样 (Simple sampling) 简单随机抽样也称为单纯随机抽样、纯随机抽样、SRS抽样...先从数字1到k之间随机抽取一个数字r作为初始单位,以后依次取r+k、r+2k……等单位。...(玩家的充值金额实际就代表了玩家的充值水平) 数据源同(1)所示 代码的是实现方式 与无序排序的代码基本一致,只是我们是按照充值金额去排序 select qq,level,money from ( select...,抽样误差比较小,缺点是抽样手续较简单随机抽样要繁杂 4.

    3.9K00

    《大话数据结构》 查找 以及一个简单的哈希表例子

    8.10.2 数字分析法 比如要存储公司员工信息,如果用手机号作为关键字,前7位可能会重复,我们可以抽取后四位作为散列地址。 如果这样抽取出现了冲突问题,还可以对抽取出来的数字进行变换。...关键词:抽取:使用关键字的一部分来计算散列存储位置的方法。 数字分析法适合处理关键字位数比较大的情况,如果实现知道关键字的分布且关键字的若干为分布较均匀就可以用这个方法。...再抽取中间的3位做散列地址,就是227....8.10.6 随机数法 选择一个随机数,取关键字的随机函数值为它的散列地址。也就是f(key) = random(key); 其中random为随机函数。...当关键字长度不等时,采用这个方法构造散列函数是比较合适的。

    2.4K120

    Webpack多入口文件、热更新等体验

    title:模板title filename:输出的html文件名称 chunks:包含的文件,可以entry和其他模块chunk的模块,插件导入到 模板时 没有排序,但都是。...excludeChunks:被排除的模块 chunksSortMode:添加到页面时模块的排序 none|default|function template:模板文件路径所在位置 templateContent...:一个函数,使用编程语言创建模板 inject:js插入位置:body, head 模板可以访问的配置项 files:为webpack的stats项,可以在模板文件中使用或者 webpackConfig...:webpackConfig的配置项 options:在模板文件中可以获取的webpack配置项。...二、webpack.optimize.CommonsChunkPlugin 抽取公共模块为一个独立的文件,一是指定的多个模块打成一个包;二是在指定的chunks中抽取公共模块 参数名称 说明 name

    2.7K60

    Redis:11---Set对象

    特点: 集合通过散列表来保证自己存储的元素不能重复 列表中的元素是根据插入、删除元素时来对数据进行排序,但是集合中的元素在插入或删除时是无序的,所以集合中的元素是无序排列的 和列表一样都可以存储多个字符串...脉脉) sdiff qiuxiangSet darrenSet - {darren, ting} 投票 问答网站、文章推荐网站、论坛这类注重内容质量的网站上通常都会提供投票功能,用户可以通过投票来支持一项内容或者反对一项内容...: 一项内容获得的支持票数越多,就会被网站安排到越明显的位置,使得网站的用户可以更快速地 浏览到高质量的内容 与此相反,一项内容获得的反对票数越多,它就会被网站安排到越不明显的位置,甚至被当作广 告或者无用内容隐藏起来...标签 集合类型比较典型的使用场景是标签(tag)。例如一个用户可能对娱 乐、体育比较感兴趣,另一个用户可能对历史、新闻比较感兴趣,这些兴趣点就是标签。...抽奖系统 Redis集合的 SPOP(随机移除并返回集合中一个或多个元素) 和 SRANDMEMBER(随机返回集合中一个或多个元素) 命令可以帮助我们实现一个抽奖系统 如果允许重复中奖,可以使用SRANDMEMBER

    1K30

    numpy总结

    np.random.binomial(最大值,概率,产生数的个数)产生符合二项分布的随机数 np.random.hypergemotric(普通球数量,倒霉球数量,一次取出个数,个数)...()对数正态分布 数组专用函数 np.sort()排序 lesort()根据键值对字典进行排序,argsort()返回输入数组排序后的下标 ndarray.sort()对数组进行原地排序...msort()沿第一个轴进行排序,sort_complex()对复数按照先实部后虚部的顺序进行排序。...2整除的元素 np.nonzero(a)抽取非0元素 np.outer(a数组,b数组)a数组的元素*b数组行,生成二维数组 金融专用函数 np.fv()计算终值 np.pv...,允许空值 np.assert_array_less()比较一个数组每个元素是否大于另一个数组的对应索引的每个元素,抛出异常 numpy中要注意的几个地方: 切片不会复制原数组,而是生成原数组的视图

    1.6K20
    领券