先看博客:http://www.itnose.net/detail/6392462.html
这里有一个hash的方法:http://www.itnose.net/detail/6431264.html
第一种遍历方法:
a.是检测新数组newArr里有没有包含Arr里的i项,如果没有则向newArr里添加Aii[i]项,如果有则跳过;不做任何操作。
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; function unArray (Arr) { var newArr = []; for (var i = 0; i < Arr.length; i++) { if (newArr.indexOf(Arr[i]) == -1){//检测newArr数组里是否包含Arr数组的内容,==-1检索的字符串没有出现则为-1 newArr.push(Arr[i])//把Arr数组的第i项插入新数组 } }; return newArr; } unArray(Arr); //console.log(unArray(Arr));
b.是在Arr数组里检测,Arr.indexOf(Arr[i])返回某一项在Arr数组里第一次出现的位置,如果第一次出现就push到newArr数组去,如果第二次出现,则什么都不操作。
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9]; function unArray (Arr) { var newArr = [Arr[0]]; for (var i = 1; i < Arr.length; i++) { if (Arr.indexOf(Arr[i]) == i){//检测Arr数组第一次出现的位置是i newArr.push(Arr[i])//把Arr数组的第i项插入新数组newArr } }; return newArr;//返回新数组newArr } unArray(Arr); //console.log(unArray(Arr));
第二种方法:
排序后相邻去除法
思路:先将数组经过sort排序,这时候相同的元素处于相邻的位置,所以在便利数组的时候我们只将与前一值不重复的值
function unique(array){ var reArr=[array[0]]; var len=array.length; array.sort(); for(var i=1;i<len;i++){ if(array[i]!=reArr[reArr.length-1]){//注意这里 reArr.push(array[i]); } } return reArr; }
第三种方法:
对象键值对法
思路:新建一js对象json以及新数组reArr,遍历数组元素是否为json的键,不是则创建,是则判断元素的类型在键对应的值中是否存在。
function unique(array){ var json = {}, reArr = [], len = array.length, val, type; for (var i = 0; i < len ; i++) { val = array[i]; type = Object.prototype.toString.call(val); if (!json[val]) {//如果键对应的值不存在则是第一次存取 json[val] = [type];//设置该键为数组,并赋值元素类型 reArr.push(val);//往reArr中添加元素 } else if (json[val].indexOf(type) < 0) { json[val].push(type); reArr.push(val); } } return reArr; } //该方法有bug,当有多个{}时,只能保存一个{}
时间: 2024-11-05 01:01:46