首页 > 试题广场 >

数组去重

[编程题]数组去重
  • 热度指数:24101 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请补全JavaScript代码,要求去除数组参数中的重复数字项并返回该数组。
注意:
1. 数组元素仅包含数字
示例1

输入

_deleteRepeat([-1,1,2,2])

输出

[-1,1,2]
const _deleteRepeat = array => [...new Set(array)];

发表于 2022-01-04 21:38:37 回复(0)
数组去重可以使用很多种方法 以下只是两种常见的。
const _deleteRepeat = array => {
    // 补全代码
    // (1)使用ES6 中的set 方法进行去重
    //return Array.from(new Set(array))

    // (2)使用新数组对不重复的数组进行保存
    let newArr = []
    array.forEach(item => {
        if(newArr.indexOf(item) === -1){
            newArr.push(item)
        }
    });
    return newArr
} console.log(_deleteRepeat([-1,1,2,2])); 


发表于 2021-12-01 19:24:41 回复(2)
在数组中,如果数组元素有多个NaN,用indexOf方法和===运算符都不太合适,所以采用includes方法; 
var newArr=[];//空数组+for...in的方法
               for(let i in array){
                   if(!newArr.includes(array[i])){
                       newArr.push(array[i])
                   }
               }
                return newArr;
//在数组中for...in遍历的是数组下标

var newArr=[];  //空数组+for的方法
              for(let i=0;i<array.length;i++){
                  !newArr.includes(array[i])&&newArr.push(array[i])
              }
                return newArr;
在数组中for遍历的是数组下标

var newArr=[];//空数组+for...of的方法
              for(let val of array){
                  newArr.includes(val)||newArr.push(val)
              }
                return newArr;
//在数组中for...of遍历的是数组中的项
  
 var newArr=[];//空数组+array.forEach的方法 
            array.forEach(item=>{
              !newArr.includes(item)&&newArr.push(item);
            })
                return newArr;

var newArr=[];//空数组+array.map的方法
            array.map(item=>{
           !newArr.includes(item)&&newArr.push(item);
            })
                return newArr;

var newArr=[];//空数组+array.filter的方法
            array.filter(item=>{
          return !newArr.includes(item)&&(newArr[newArr.length]=item);
            })
                return newArr;

return   array.reduce((previous,current)=>{ //arr.reduce方法 第一个参数传回调函数
     !previous.includes(current)&&previous.push(current);
    return previous;
   },[])      //第二个参数传空数组
//数组的reduce方法对新手不太友好,但学会它真的很管用.

return [...new Set(array)]
return Array.from(new Set(array)
Set对象是值的集合,Set中的元素只会出现一次,即Set中的元素是唯一的.

let a=array.sort((a,b)=>{  //数组排序
        a-b
    });
    for(let i=0;i<a.length;i++){  
        if(Object.is(a[i],a[i+1])){  //Object.is(参数一,参数二)
            a.splice(i+1,1); //用万能法数组截取第i+1项目
            i--;  //i++再i--
        } } 
      return a;



发表于 2022-01-22 21:16:37 回复(0)
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
    	
        <script type="text/javascript">
            const _deleteRepeat = array => {
                // 补全代码
                return array.filter((item, index, arr) => arr.indexOf(item) === index)
                return [...new Set(array)]
                return Array.from(new Set(array))
            }
        </script>
    </body>
</html>

发表于 2022-01-10 17:22:55 回复(0)
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
    	
        <script type="text/javascript">
            const _deleteRepeat = array => {
                // 补全代码
                let set = new Set(array)
                return [...set]
            }
        </script>
    </body>
</html>

发表于 2022-08-18 23:11:59 回复(0)
const _deleteRepeat = array => {
                // 补全代码
                return array.sort((a,b) => a-b).filter((x, index, self) => self.indexOf(x)===index);
                console.log(array);
            }
发表于 2022-01-20 17:23:34 回复(0)
 const _deleteRepeat = array => {
                // 补全代码
                // 创建set集合
                const newSet = new Set(array);
                // 从新将set集合转换成数组
                return [...newSet]
            }

发表于 2024-03-31 17:56:46 回复(0)
const _deleteRepeat = array => {
    // 补全代码
    // return Array.from(new Set([...array]))

    let newArr = []
        array.forEach(item => {
            if(!newArr.includes(item)) {
                newArr.push(item)
                }
        })
        return newArr;
}

发表于 2023-09-07 16:33:10 回复(0)
Splice YYDS!
const _deleteRepeat = array => {
                // 补全代码
                for(i=0;i<array.length;i++){
                    for(j=i+1;j<array.length;j++){
                        if(array[i] == array[j])
                            array.splice(j,1); // 核心代码
                    }
                }
                return array;
            }


发表于 2023-08-12 10:52:58 回复(0)
const _deleteRepeat = array => {
// 补全代码
var a={}
for(let i=0;i<array.length;i++){
a[array[i]]=0
console.log(a)
}
return Object.values(a)
}
console.log(_deleteRepeat([1,2,1,3,4,1,-1,-1,2,1]))

这里的测试不知道为什么总是错,但实际上目前的各种ide编译都是通过的
发表于 2023-06-16 20:22:03 回复(0)
用Set去重:
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
    </head>
    <body>
    	
        <script type="text/javascript">
            const _deleteRepeat = array => {
                // 补全代码
                let ans = [];
                (new Set(array)).forEach((v1, v2, s) => ans.push(v1))
                return ans;
            }
        </script>
    </body>
</html>


发表于 2023-05-27 19:52:34 回复(0)
          const _deleteRepeat=array => Array.from(new Set(array))
          console.log(_deleteRepeat([-1,1,2,2]))

发表于 2023-04-16 16:28:05 回复(0)
            const _deleteRepeat = array => {
                let set = new Set(array)
                let res = Array.from(set)
                return res
            }
发表于 2023-04-06 15:29:24 回复(0)
 return [...new Set(array)]; 
发表于 2023-02-16 19:59:36 回复(0)
直接
    return Array.from(new Set(array));
一行代码解决。
发表于 2023-02-01 12:42:23 回复(0)
const _deleteRepeat = array => {
                // 补全代码
                if (array.length <= 1) return array;
               
                const res = [array[0]];
                for (let i =1; i < array.length; i++) {
                    if (res.indexOf(array[i]) < 0) {
                        res.push(array[i]);
                    }
                }
                return res;
            }
发表于 2022-12-11 21:46:04 回复(0)
<script>
        let arr = [-1,1,2,2]; // 原数组
        let add = []; // 声明一个新的数组
        arr.forEach((item)=>{
            // 判断add数组里面是否有arr数组里面的当前项
            if(add[item]){
                return
            }else{
                // 没有则将当前项放入add数组中
                add.push(item)
            }
        })
    </script>
发表于 2022-11-29 21:39:35 回复(0)
const _deleteRepeat = array => {
    // 补全代码
    return array.filter((el,index) => {
        return array.findIndex(item => el == item) == index
    })
}
发表于 2022-11-29 17:28:22 回复(0)
    1 数组去重, 定义一个空数组,配合indexOf,遍历循环
 <script type="text/javascript">
            const _deleteRepeat = array => {
                let res = []               
                for(let i = 0;i<array.length;i++){
                    if(res.indexOf(array[i]) === -1) {
                        res.push(array[i])
                    }
}

return res
                
            }
        </script>

发表于 2022-11-22 15:11:56 回复(0)
return [...new Set(array)]
发表于 2022-10-25 13:28:42 回复(0)