JS算法之去掉数组中的重复元素

  • 更新时间:4年零5天前
  • 浏览量:2347
  • 发布人:思过崖

给定一个数组[1,2,4,3,3,4,5],通过JS算法移除数组中的重复元素

思路一:

  • 初始化一个数组作为结果数组,存放从给定数组中过滤后的唯一的元素
  • 对给定数组中的元素进行遍历,如果给定数组中的元素在结果数组中已经存在,则不再添加,否则就添加到结果数组中去
  1. function delRepeat(arr){
  2. //arr是给定数组
  3. //tmpArray是结果数组
  4. var tmpArray=[arr[0]];
  5. for(var i=1;i<arr.length;i++){
  6. var repeat=false
  7. for(var j=0;j<tmpArray.length;j++){
  8. if(arr[i]==tmpArray[j]){
  9. repeat=true;
  10. break;
  11. }
  12. }
  13. if(!repeat){
  14. tmpArray.push(arr[i]);
  15. }
  16. }
  17. return tmpArray;
  18. }
  19. var arr=[1,2,4,3,3,4,5];
  20. //输出结果"1,2,4,3,5"
  21. alert(delRepeat(arr));

思路二:

  • 初始化一个数组作为结果数组,存放从给定数组中过滤后的唯一的元素
  • 对给定数组中的元素先排序之后再进行遍历,如果给定数组中的元素在结果数组中已经存在,则不再添加,否则就添加到结果数组中去
  • 好处是比思路一的解决方法执行效率更高
  • 弊端是会打乱原有的数组顺序
  1. function delRepeat(arr){
  2. arr.sort();
  3. var tmpArray=[arr[0]];
  4. for(var i=1;i<arr.length;i++){
  5. if(arr[i]!==tmpArray[tmpArray.length-1]){
  6. tmpArray.push(arr[i]);
  7. }
  8. }
  9. return tmpArray;
  10. }
  11. var arr=[1,2,4,3,3,4,5];
  12. //输出结果"1,2,3,4,5"
  13. alert(delRepeat(arr));

思路三[推荐]:

  • 初始化一个对象来作为数组元素是否存在的映射,然后再初始化一个数组用来存放从给定数组中过滤后的唯一的元素
  • 对给定数组中的元素进行遍历,与对象的中的键进行比对,如果给定数组中的元素已经在对象里面存在对应的键,则不再添加,否则就添加到结果数组中去
    1. function delRepeat(arr){
    2. var tmpObj={}
    3. tmpArray=[];
    4. for(var i=0;i<arr.length;i++){
    5. if(!tmpObj[arr[i]]){
    6. tmpObj[arr[i]]=true;
    7. tmpArray.push(arr[i]);
    8. }
    9. }
    10. return tmpArray;
    11. }
    12. var arr=[1,2,4,3,3,4,5];
    13. //输出结果"1,2,4,3,5"
    14. console.log(delRepeat(arr));
    综上所述,思路三中的解决方法最佳,既能够保证数据的原生性,又能够保证执行的效率!