一、简单的去重方法

// 最简单数组去重法
/*
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
* */
function uniq(array){
var temp = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
} var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));

二、对象键值法去重

/*
* 速度最快, 占空间最多(空间换时间)
*
* 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
* 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
* 不是的话给对象新增该键并放入新数组。
* 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
* 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
* 解决上述问题还是得调用“indexOf”。*/
function uniq(array){
var temp = {}, r = [], len = array.length, val, type;
for (var i = 0; i < len; i++) {
val = array[i];
type = typeof val;
if (!temp[val]) {
temp[val] = [type];
r.push(val);
} else if (temp[val].indexOf(type) < 0) {
temp[val].push(type);
r.push(val);
}
}
return r;
} var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

三、排序后相邻去除法

/*
* 给传入数组排序,排序后相同值相邻,
* 然后遍历时,新数组只加入不与前一值重复的值。
* 会打乱原来数组的顺序
* */
function uniq(array){
array.sort();
var temp=[array[0]];
for(var i = 1; i < array.length; i++){
if( array[i] !== temp[temp.length-1]){
temp.push(array[i]);
}
}
return temp;
} var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

四、数组下标法

/*
*
* 还是得调用“indexOf”性能跟方法1差不多,
* 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
* 那么表示第i项是重复的,忽略掉。否则存入结果数组。
* */
function uniq(array){
var temp = [];
for(var i = 0; i < array.length; i++) {
//如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
if(array.indexOf(array[i]) == i){
temp.push(array[i])
}
}
return temp;
} var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

五、优化遍历数组法

// 思路:获取没重复的最右一值放入新数组
/*
* 推荐的方法
*
* 方法的实现代码相当酷炫,
* 实现思路:获取没重复的最右一值放入新数组。
* (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
function uniq(array){
var temp = [];
var index = [];
var l = array.length;
for(var i = 0; i < l; i++) {
for(var j = i + 1; j < l; j++){
if (array[i] === array[j]){
i++;
j = i;
}
}
temp.push(array[i]);
index.push(i);
}
console.log(index);
return temp;
} var aa = [1,2,2,3,5,3,6,5];
console.log(uniq(aa));

最新文章

  1. php工厂方法
  2. hibernate----(Hql)查询
  3. Python数据类型-----数字&amp;字符串
  4. 【M27】要求或者禁止对象产生于heap之中
  5. Objective-c CoreData
  6. IntelliJ Idea12 破解码与中文乱码配置
  7. Selenium IDE初探
  8. css动画结束后 js无法修改translated值 .
  9. 在mac本上删除mysql
  10. loadrunner controller:设置多个load generator
  11. 网上搜索到的 比较好的mysql查询语句练习题
  12. [LeetCode] Top K Frequent Words 前K个高频词
  13. tkinter中spinbox递增和递减控件(十)
  14. HTML5 新增的 input 事件
  15. &lt;4&gt;Python切片功能剖析
  16. vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)
  17. Linux搜索查找类指令
  18. spring boot mybatis sql打印到控制台
  19. unable to find the sources of your current Linux kernel.
  20. MATLAB 正则表达式(一)(转)

热门文章

  1. mac 使用命令行向 github 提交代码
  2. 《深入理解 Java 虚拟机》读书笔记:虚拟机类加载机制
  3. 峰哥说技术:06-手撸Spring Boot自定义启动器,解密Spring Boot自动化配置原理
  4. Feign 客户端的使用 二
  5. 前端传json数组 ,后端的接收
  6. Simulink仿真入门到精通(十六) Simulink基于模型设计的工业应用概述
  7. [python]回答百度知道上的问题2000-2999之间的回文日
  8. 5G 将带给程序员哪些新机会呢?
  9. python基础学习day02
  10. 人见人爱A-B 题解