过滤数组中的重复元素,有时我们会需要用到这些方法。
一、遍历数组
一看到去重,首先想到的是遍历去重,再结合indexOf方法,就可以做到去重了。
function distinct(arr) { var result = []; for (var i = 0,len = arr.length; i < len; ++i) { // IE9+才支持indexOf if (-1 === result.indexOf(arr[i])) { result.push(arr[i]); } } return result; }
二、判断数组下标
类似于第一种方式:
function distinct1(arr) { var result = [arr[0]]; for (var i = 1,len = arr.length; i < len; ++i) { if (i == arr.indexOf(arr[i])) { result.push(arr[i]); } } return result; }
利用indexOf判断每项是否在数组中其他位置出现,来判断是否重复。
三、排序后去除相邻元素
function distinct2(arr) { arr.sort(function(val1,val2) { return val1 > val2; }); var result = [arr[0]]; for (var i = 1,len = arr.length; i < len; ++i) { if (arr[i] !== result[result.length - 1]) { result.push(arr[i]); } } return result; }
先将数组排序后,按照相邻元素不相同的方式来筛选重复的元素。
四、优化遍历数组
function distinct3(arr) { var result = []; for (var i = 0,len = arr.length; i < len; ++i) { for (var j = i + 1; j < len; ++j) { if (arr[i] === arr[j]) { j = ++i; } } result.push(arr[i]); } return result; }
该方法的实现思路是,获取没有重复的最右一值放入新数组,当检测到有重复时终止当前循环进入顶层循环的下一层判断。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。