js数组去重的4个方法

LTspice导入德州仪器SPICE模型的实用指南与常见问题解析 本文详细介绍了如何在LTspice中导入德州仪器的SPICE模型,包括模型文件获取、路径管理、导入步骤及常见问题解析。通过实用指南帮助工程师精确仿真电路性能,提升设计效率,重点涵盖了第三方模型的导入教程和最佳实践。 阅读详情

面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。

    我总共想出了三种算法来实现这个目的:

  1. Array.prototype.unique1 = function()
    {
    	var n = []; //一个新的临时数组
    	for(var i = 0; i < this.length; i++) //遍历当前数组
    	{
    		//如果当前数组的第i已经保存进了临时数组,那么跳过,
    		//否则把当前项push到临时数组里面
    		if (n.indexOf(this[i]) == -1) n.push(this[i]);
    	}
    	return n;
    }
  2. Array.prototype.unique2 = function()
    {
    	var n = {},r=[]; //n为hash表,r为临时数组
    	for(var i = 0; i < this.length; i++) //遍历当前数组
    	{
    		if (!n[this[i]]) //如果hash表中没有当前项
    		{
    			n[this[i]] = true; //存入hash表
    			r.push(this[i]); //把当前数组的当前项push到临时数组里面
    		}
    	}
    	return r;
    }
  3. Array.prototype.unique3 = function()
    {
    	var n = [this[0]]; //结果数组
    	for(var i = 1; i < this.length; i++) //从第二项开始遍历
    	{
    		//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
    		//那么表示第i项是重复的,忽略掉。否则存入结果数组
    		if (this.indexOf(this[i]) == i) n.push(this[i]);
    	}
    	return n;
    }
    

    其中第1种和第3种方法都用到了数组的indexOf方法。此方法的目的是寻找存入参数在数组中第一次出现的位置。很显然,js引擎在实现这个方法的时候会遍历数组直到找到目标为止。所以此函数会浪费掉很多时间。 而第2中方法用的是hash表。把已经出现过的通过下标的形式存入一个object内。下标的引用要比用indexOf搜索数组快的多。

    为了判断这三种方法的效率如何,我做了一个测试程序,生成一个10000长度的随机数组成的数组,然后分别用几个方法来测试执行时间。 结果表明第二种方法远远快于其他两种方法。 但是内存占用方面应该第二种方法比较多,因为多了一个hash表。这就是所谓的空间换时间。  就是这个测试页面,你也可以去看看。

2010年10月7日更新:

根据hpl大牛的思路,我写了第四种方法:

Array.prototype.unique4 = function()
{
	this.sort();
	var re=[this[0]];
	for(var i = 1; i < this.length; i++)
	{
		if( this[i] !== re[re.length-1])
		{
			re.push(this[i]);
		}
	}
	return re;
}

    这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。 最终测试的结果是此方法运行时间平均是第二种方法的三倍左右,不过比第一种和第三种方法快了不少。

流体动力学仿真软件:CFX_(10).案例实践:复杂流场分析 在“Phases”选项卡中,定义参与仿真的不同相。例如,如果您要分析气液两相流,可以定义“Air”和“Water”两个相。 阅读详情

相关推荐

微信群消息监控系统实战:从零搭建Python自动化监控平台

本文详细介绍了如何从零搭建Python微信群消息监控系统,实现自动化监控和记录群消息。通过wxauto库模拟人工操作微信,结合MySQL数据库存储和智能去重策略,系统能高效处理大量消息并支持关键词监控。文章还分享了性能优化、安全合规等实战经验,帮助开发者快速构建高效稳定的监控平台。

weixin_29091105的博客 320

js 对象数组去重并保留最后一项

封装(vue中使用),其中arr传要去重的数组,name为需要去重的字段。

c_qianxia5040的博客 2200

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2539

对于数组对象,根据指定的属性去重,并保留后一项

reduce( function (初始值或计算后返回值,当前元素,索引,原数组) {方式二:增加一个新数组,配合ES6的every方法。方式一:使用双层for循环可直接修改原数组。方式四:使用ES5的reduce方法。方式三:使用ES6的map方法。

qq_45569925的博客 924

【云原生技术】K8s 在拉取镜像时报错tls: failed to verify certificate: x509: certificate signed by unknown authority

原因 Kubernetes 节点在拉取镜像时会对 Harbor 的 HTTPS 证书做严格校验; 日志里的核心报错是: ``` tls: failed to verify certificate: x509: certificate signed by unknown authority ``` 说明 Harbor 返回的服务器证书要么是自签发,要么缺少在系统信任链里的根/中级 CA,节点因此拒绝连接。 你需要让 **所有负责拉镜像的节点(containerd 或 Docker 守护进程)

weixin_46453070的博客 2875

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

js数组去除重复对象元素

deleteRe(a, b) { var c = a.concat(b),//合并成一个数组 temp = {},//用于id判断重复 result = [];//最后的新数组 //遍历c数组,将每个item.id在temp中是否存在值做判断, c.map((item,index)=>{ if(!temp[item.name]){ result.push(item); temp[item.n......

weixin_44659286的博客 811

新能源汽车电机交流电流测量系统精度全链路分析

通过全链路误差建模与瓶颈分析,结合硬件选型优化与软件算法补偿,可将系统精度从4.2%提升至≤1% FS。本文所述方法论已应用于某800V电驱平台开发,实测电流控制精度达±0.8%,为高性能电机控制奠定基础。为例,深入剖析从互感器采集到CAN报文解析的全链路信号处理流程,揭示各环节误差来源及对最终精度的影响,为研发测试提供理论支撑。:±0.1%(电阻温漂与运放开环增益限制):运放增益带宽积(GBW)不足导致高频衰减。:±0.02%/℃(铁氧体材料温敏特性):±0.5%读数(磁芯饱和效应)

优快云-新能源汽车研发测试专业博主 1493

这9种数组去重方法,直到今天,我才彻底弄懂

目录 方法一、最常使用,也最容易想到的思路(ES5): 方法二、ES6 Set去重(ES6中最常用) 方法三、使用indexOf去重 方法四、使用sort排序去重 方法五、使用includes去重 方法六、利用hasOwnProperty去重 方法七、利用filter +indexOf去重 方法八、利用Map数据结构去重 方法九、利用reduce + includes去重 数组去重是我们经常会遇到的题目,我总结了9种方法来实现这个功能,一起来看看吧! 方法一、最常使用,也最容...

czjl6886的博客 7091

基于潜在空间分数匹配的混合型表格数据合成方法

然而,在我们的模型中,β 预计会更小,因为我们不需要嵌入的分布精确地遵循标准高斯分布,因为我们还有一个额外的扩散模型。受 Transformer 在表格数据分类/回归任务中取得成功的启发,我们首先为每一列学习一个独特的标记器,然后将标记(列)级表示输入到 Transformer 中,以捕捉列之间错综复杂的关系。在第 4 节中,我们证明了通过这种设计,TABSYN 可以在不到 20 次函数评估(NFE)的情况下生成高质量的合成表格数据,这比其他基于扩散的表格数据合成方法要少得多。是标记器的可学习参数。

步子哥的博客 854

Thinkpad可以安装Win11吗?Thinkpad升级Win11教程

win11正式版推出之后,不少用户也想要体验一把新系统,但是不知道thinkpad是否支持win11,其实基本上现在在售的都是可以升级win11的。2、如果大家使用的是老款的ThinkPad,那么可以通过软件来检测自己是否支持win11。【电脑健康状况检查下载】答:在售的ThinkPad都是可以支持win11的,但是部分旧版本不支持。2、这时候想要升级win11的话,就可以通过镜像系统的方式来跳过系统检测。3、如果使用上面的软件检测可以支持win11,那么只要进入“设置”

xhp618的博客 2987

[JavaScript/JQuery] js数组去重的4个方法

面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。 我总共想出了三种算法来实现这个目的: Array.prototype.unique1 = function() { var n = [

hxm102581的博客 1171

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1112

JS 数组去重的4个方法

好嫁过

weixin_48496745的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript数组去重的4种方法

更多内容,欢迎关注微信公众号“让知识成为资产”。 1.基本的去重方法 function findInArr(n ,arr){ //创建函数,查找一个数在当前数组中是否存在 for (var i = 0; i &lt; arr.length; i++) { if (n == arr[i]) return true; //如果存在,返回tru...

张思阳的博客 916

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

js数组去重的4种方法:

js数组去重的4种方法: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equ...

舜岳的博客 636

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

4、JS数组去重方法收录

更详细、更多方法可前往(1、https://www.cnblogs.com/guangyan/articles/6682686.html ;2、https://www.cnblogs.com/jiayuexuan/p/7527055.html ) 1、利用for循环;先声明一个 res 的空数组;再遍历原数组,每遍历一次原数组都赋值给 item ,再建一层for循环,对 res 这数组遍历,然后对...

克隆代码 177

js数组去重的4种方法

js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, j = this.length; i ) {

dz45693的专栏 1898

js数组去重的4个方法及ts数组去重

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34192993的博客 3449

js数组去重(4种方法)

【代码】js数组去重(4种方法)

2301_76917834的博客 1007

js数组对象去重(4种方法)

问题:数组对象去重 方法一:es5冒泡排序法,去重arr(较好用) var arr = [{name: 'a',id: 1}, {name: 'a',id: 2}, {name: 'b',id: 3}, {name: 'c',id: 4}, {name: 'c',id: 6}, {name: 'b',id: 6}, {name: 'd',id: 7}]; function deWeight() { for (var i = 0; i < arr.length - 1; i++) .

前端菜菜DayDayUp的博客 9123
上一篇: 解决IE8以下不支持background-size属性
下一篇: 按Enter键调用登录按钮
lxtlog
博客等级 码龄10年 6粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值