原文:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次。 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/deduplication-array/

题目描述:

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次。

  • 示例 1: ``` 给定数组 nums = [1,1,2],

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。

你不需要考虑数组中超出新长度后面的元素。


+ 示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。



#### 解题:
##### 思路一:
大家都知道js对象的key是唯一的,采用`hasOwnProperty`检测的属性的形式,进行过滤
```javascript
var removeDuplicates = function(nums) {
    var obj = {};
    var result = nums.filter((item,index)=>{
        return obj.hasOwnProperty(item) ? false : (obj[item]=true);
    });
    return result;
};
思路二:

es6的Set

var removeDuplicates = function(nums) {
      return Array.from(new Set(nums));
    //return new Set([...nums]); //更简洁

};
思路三:

这个有局限性,必须要进行排序过后;

var removeDuplicates = function(nums) {
    var res = [];
    for(var i =0;i<nums.length;i++){

	if(nums[i]!= nums[i+1]){
	   res.push(nums[i])
	}
  };
  return res;
};
removeDuplicates([66,1,4,3,66,0,0,1,1,1,2,2,3,3,4].sort())

等等很多,欢迎补充~

扩展阅读: