JS 数组去重实现,一道面试题

         今日去某公司面试web前端,本来对这个公司感觉一般,但是技术面试两面一共从下午2:30到5:30,各种问题问,主要以JS为主,顿时对这个公司有了好的印象,个人感觉面试的水平高最起码表明一个公司的态度。问的还算是很给力,都是一般不几个常用到的,但是想一想确实还挺实用,有了这次思路,下次自己玩前端的时候可以把这些思想用上,感觉还是收获一些知识的。

       其中有一道题本来挺简单的,但是细想有点不一样,当时连续面了2个多小时了,有点被唬住了,写的不是很好,感觉不爽,回来写了一下,还蛮简单的,不知道当时就被吓到了。下面将原题贴出,并附上代码有兴趣的朋友们可以看一下。

       题目:JS实现数组去重,要求 arr = [1, 2, 3, 4, 5, "1", "2", 3, 4, 5], arr.strice() ==> [1, 2, 3, 4, 5, "1", "2"]。注意要求要改变之前的arr为去重之后的。

       题目分析:本来挺简单的,先回答两个循环(最次策略);然后下想了一下回答使用一个obj={},匹配属性的方法obj[key] == undefined的方式(类似简易hash)。可是有点坑的是有个1 和 “1”不算相同,这样一般的hash策略就不行了。于是乎当时就有点蒙了。感觉对hash添加什么别的判断会降低效率。。。。

       具体实现不说了,大家看代码就懂了,下面是coffeescript实现(JS也那个意思,个人还是喜欢coffee):

Array::strice = ->
	hash = {}
	len = this.length
	i = 0
	while i < len
		if hash[this[0]] == undefined
			hash[this[0]] = this[0]
			this.push this[0]
			this.shift()
		else if typeof this[0] == typeof hash[this[0]]
			this.shift()
		else
			this.push this[0]
			this.shift()
		i++
	return this


arr = [1,2,'3',4,3,1,"2",5,6,5,2,10]
console.log arr.strice()
console.log arr


时间复杂度n,空间复杂度 l(“去重”后的数组长度,这里的去重是指严格去重,2和“2”算重复)。

觉得这个题还是蛮有新意的不小心真觉得很别扭的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值