移除元素并排序

199 阅读1分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

问题描述

将数组重复的元素删除掉并且进行排序,然后返回出一个有顺序的数组。
示例:

let a = [1,3,5,2,3,1,4];
// 传入a要输出b
let b = [1,2,3,4,5];

解题思路

遇到问题不着急,一步一步来;首先,从这里可以看出需要分成两步做的,第一步时先删除掉重复的元素,第二步将已经删除掉重复元素后的数组进行排序。

代码实现

第一步时先数组去重,数组去重有很多种方法,我们先来尝试第一种,使用双层for循环实现。第一层for循环,循环整个数组的所有元素;第二层for循环,循环第一层循环到的那个元素后面的所有元素,然后进行对比,若是有相同的则跳过此次循环进入下一次循环,若是第二层循环结束了都还没有相同的,那就把这个元素push到newArr里头。

let oldArr = [1,2,4,3,7,56,3,5,5,3,2,1];
let newArr = [];
for(let i=0; i<oldArr.length; i++) {
  for(let j=i+1; j<oldArr.length; j++) {
    if(oldArr[i] === oldArr[j]) {
      j = ++i;
    };
  };
  newArr.push(oldArr[i]);
}
console.log(newArr)

第二步是将去重后的数组进行排序,最简单方便的是用sort()方法,这次就不用这种了,还是用双重for循环(冒泡排序)来实现排序。第一层循环取到所有元素,在每次的循环中与第二层循环每一个做对比,再两两交换,把大的往后面排(这里是升序,若是降序就把小的往后面排)。

let arr = [4,7,3,2,1,5];
let max = null;
for(let i=0; i<arr.length-1; i++) {
  for(let j=0; j<=arr.length-1; j++) {
    if(arr[j] > arr[j+1]) {
      max = arr[j];
      arr[j] = arr[j+1];
      arr[j+1] = max;
    }
  }
}
console.log(arr);

最后只要把上面的两部分代码封装到函数里面,然后再将结果 return 出来即可。
数组的驱虫和排序都有很多种方法,这里只是暂时用了最最基础的方法而已。