题目:自定义一个js函数,去掉给定数组中的重复值。
例如:
传入数组 a = [0, 8, 5, 4, 78, 8, 90, 4, 'a', 'b', 'a'];
要求返回:[0,4,5,8,78,90,a,b]
解答:
<script> //去除数组中的重复值 var getNR = function(src) { src = src || []; var res = {}; var curr = []; var i, j = 0,temp, name; for (i = 0; i < src.length; i++) { temp = src[i]; if (res[temp]) { //do noting } else { res[temp] = 1; } } for (name in res) { if (res.hasOwnProperty(name)) { curr[j++] = name; } } return curr; }; </script>
代码思路分析:
思路1,将目标数组进行排序,然后依序删除重复的数组,不过此种方法在删除重复元素的同时也改变数组原有元素的属性,不合要求,略过。
思路2,新建一个数组b,将a中的元素push到b中,但是在push之前检查该元素是否存在。此思路的时间复杂度是n*n,简单而笨重的方法,仅供参考。
思路3,跟思路2类似,不过充分利用了js对象的属性,新建一个空对象,将a中的元素作为属性添加到该对象中,在添加之前检测该属性是否已存在。
全部添加完后将该对象的属性依序放到数组中,return。
综合比较后,思路3胜出,用在了以上的js 去除数组中重复值的脚本中。