本文内容为学习了司徒正美的博客(http://www.cnblogs.com/rubylouvre/archive/2009/12/08/1619702.html)后整理总结部分内容而得
总结两种思路的解决方式。
解决思路一:
- 将数组第一个元素取出,将数组转化为字符串,并删除该元素对应的字符串内容
- 通过数组转化成的字符串删除其余该元素对应的重复数组元素
- 将删除重复数组元素的字符串再转化为数组
- 不断循环上述3步,直至数组中不再有元素,即对所有元素都进行过了判断重复操作。然后将字符串转为数组,输出结果。
代码如下:
var ret= ["span","span","strong","span","b"]
var norepeat = function(array){
var set = array.join(",")+",";
while(array.length){
var el = array.shift();
set = set.replace(el+",","");
if(set.indexOf(el+",") != -1){
set = set.replace(new RegExp(el+",","g"),"");
array = set.replace(/,$/g,"").split(",");
}else{
set = el+","+set;
}
}
return set.replace(/,$/g,"").split(",")
}
alert(norepeat(ret))//最后返回b,strong
解决思路二(本人更喜欢这个方法,思路比较简单明了):取出数组中的每一个元素,并新建一个容器,统计每个元素出现的次数,每个元素都统计完成后,输出统计次数为1的元素。
代码如下:
<!DOCTYPE html>
<html>
<head>
<script src="jquery-1.10.2.js"></script>
<script src="avalon.js"></script>
<script>
$(function () { $("button").click(noRepeat) });
function noRepeat() {
var arr = ["hello", "hello", "today", "sunshine"],result=[];
for (var i = 0, l = arr.length, temp = []; i < l; i++) {
temp[arr[i]] ? temp[arr[i]]++ :temp[arr[i]]= 1;
};
for (var i in temp)
if (temp[i] === 1)
result.push(i);
alert(result);
}
</script>
</head>
<body>
<div id="divTest">
</div>
<button click="noRepeat">delete</button >
</body>
</html>