JS算法:去重--基本解法

JS算法:去重--基本解法_第1张图片

简介

去重是一个比较常见的算法,简而言之就是把一个集合中重复的项目去掉只保留不重复的。下面是一个JS最简单的处理。后续2-4没给答案原理差不多,大家试一下吧。

基本算法

遍历目标数组,把目标数组中的元素放入新的数组中,放入前检查是否已经存在,如果已经存在则不再放入。

基础函数

  1. 数组去重
    例如:[1,4,6,7,9,6,4,5]去重后的结果为:[1,4,6,7,9,5]
    代码:
function uniqueArray(arr){
  // 存放结果
  var res = [];
  for(var i in arr){// 遍历数组元素
    if(res.indexOf(arr[i]) == -1){// 如果结果数组不存在该元素则保存
       res.push(arr[i]);
    }
  }
  // 返回去重后的数组
  return res;
}
// 测试
uniqueArray([1,4,6,7,9,6,4,5]);

注意:indexOf是ES5新增加函数,用来获取数组中元素的位置(下标),兼容性IE8+

  1. 字符串去重
    例如:"14679645"去重后的结果为:"146795"
    代码:
function uniqueString(str){
  // 存放结果
  var res = "";
  for(var i in str){// 遍历字符串元素
    if(res.indexOf(str.charAt(i)) == -1){// 如果结果不存在该元素则保存
       res+=str.charAt(i);
    }
  }
  // 返回去重后的字符串
  return res;
}
// 测试
uniqueString("14679645");

发现没有,与数字去重长的差不多。
可以把字符串转化成数组,然后去重,再把结果数组转换成字符串。(这里使用了上面那个数组去重的函数uniqueArray)

// 字符串转换成数组
function uniqueString(str){
  // 把字符串转换成数组
  var arr = str.slice("");
  // 数组去重
  var res = uniqueArray(arr);
  // 把数组转换成字符串
  return res.join("");
}
uniqueString("14679645");
  1. 数字去重
    例如:14679645去重后的结果为:146795
    延续上面的思路就比较简单了,先把数字转换成字符串,再做处理。
    代码:
function uniqueNumber(num){
  // 把数字转换成字符串
  var str = num + "";
  // 字符串去重 
  var res = uniqueString(str);
  // 把字符串转换成数字
  return parseInt(res);
}
// 测试
uniqueNumber(14679645);
  1. 对象数组去重
    例如:
[
    {
      name:"张三",
      age:18
    },
    {
      name:"李四",
      age:17
    },
   {
      name:"张三",
      age:18
    },
  {
      name:"王五",
      age:18
    }
]

去重后的结果为:

[
    {
      name:"张三",
      age:18
    },
   {
      name:"李四",
      age:17
    },
  {
      name:"王五",
      age:18
    }
]

代码:略

你可能感兴趣的:(JS算法:去重--基本解法)