当前位置: 代码迷 >> 综合 >> 数组去重(indexOf(),splice(),new Set(),form(),reduce())
  详细解决方案

数组去重(indexOf(),splice(),new Set(),form(),reduce())

热度:17   发布时间:2023-12-23 21:45:31.0

数组去重

  • 方法一(indexOf())
  • 方法二(indexOf() 和 splice())
  • 方法三(splice())
  • 方法四(new Set()和扩展运算符...)
  • 方法五(new Set()和form())
  • 方法六(reduce())

方法一(indexOf())

indexOf()

  1. 建立一个空的数组
  2. 遍历原数组
  3. 通过indexOf()判断,遍历出来的元素下标是否和此元素在数组的索引值相等
  4. 相等的话,就代表是一个新数据,把次元素推送至空的数组中
var arr = [2,3,5,7,3,6,3,5,7,5];
var newarr = [];
for(var i = 0; i<arr.length;i++){
    if(arr.indexOf(arr[i])==i){
    newarr.push(arr[i])}
}
console.log(newarr)//[2,3,5,7,6]

注意:arr.indexOf(arr[i])==i 是检测第一次出现此元素的索引位置

方法二(indexOf() 和 splice())

indexOf() 和 splice()

  1. 遍历数组
  2. 判断遍历出来的元素下标是否和此元素在数组中的索引值相等
  3. 如果不相等.将此元素从数组中删除
  4. 删除后,数组长度将变短,所以,对应的索引值也要减一
var arr = [2,3,5,7,3,6,3,5,7,5];
for(var i = 0; i<arr.length;i++){
    if(arr.indexOf(arr[i])!=i){
    arr.splice(i,1)i--}
}
console.log(arr)//[2,3,5,7,6]

方法三(splice())

splice()

  1. 循环两次数组
  2. 依次检查每一个元素在数组出现的位置,是否有相同的元素出现.
  3. 如何找到了元素在数组中出现了,并且不是第一次在数组中出现的位置,那么将删除再数组中出现的重复元素.
  4. 元素组将变成去重之后的新数组
var arr = [2,3,5,7,3,6,3,5,7,5];
for(var i = 0; i<arr.length;i++){
    for(var j=0;j<arr.length;j++){
    if(arr[i]==arr[j]&&i!=j){
    arr.splice(arr[j])}}
}
console.log(arr)//[2,3,5,7,6]

方法四(new Set()和扩展运算符…)

ES6写法:new Set()和扩展运算符…

  1. 使用new Set(),去掉重复的值(new Set()不会添加重复的值)
  2. 使用扩展运算符,转换为数组
var arr = [2,3,5,7,3,6,3,5,7,5];
var newarr = new Set(arr)
console.log(...newarr)//[2,3,5,7,6]

方法五(new Set()和form())

ES6写法:new Set()和form()

  1. 使用new Set(),去掉重复的值(new Set()不会添加重复的值)
  2. 使用Array.form()转换为数组(form()可以将Set结构转换为数组)
var arr = [2,3,5,7,3,6,3,5,7,5];
var newarr = new Set(arr)
console.log(newarr.form())//[2,3,5,7,6]

方法六(reduce())

reduce()

  1. 使用new Set(),去掉重复的值(new Set()不会添加重复的值)
  2. 使用Array.form()转换为数组(form()可以将Set结构转换为数组)
let arr = [1,1,2,3,4,5,5,6]
let newarr = arr.reduce((ar,cur)=>{
    if(!ar.includes(cur)) {
    ar.push(cur)}return ar
},[])   
console.log(newarr) // [1,2,3,4,5,6]
  相关解决方案