【数组去重】个人简单记录

javascript数组 简单去重方法记录,个人学习笔记

数组去重

for 来处理

//方法一:
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = []
for (let i = 0; i < arr.length; i++) {
  if (uniqueArr.indexOf(arr[i]) === -1) {
    uniqueArr.push(arr[i])
  }
}
console.log(uniqueArr)

//方法二:
//for of循环 来处理
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = []
for (item of arr) {
  if (uniqueArr.indexOf(item) === -1) {
    uniqueArr.push(item)
  }
}
console.log(uniqueArr)

//方法三:
//for 循环嵌套
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
//分别获取数组中的元素
for (let i = 0; i < arr.length; i++) {
//获取当前值后边的所有值
  for (let j = i + 1; j < arr.length; j++) {
  //判断两个数是否相等
    if (arr[i] === arr[j]) {
    //出现了重复元素,删除后边的元素
      arr.splice(j, 1)
/*
		当arr[i]和arr[j]相同时,它会自动的删除j位置的元素,然后j+1位置的元素,会变成j位置的元素
		而j位置己经比较过了,不会重复比较,所以会出现漏比较的情况。
		
		解决办法:当删除一个元素后,需要将该位置的元素在比较一遍
*/
      j--
    }
  }
}
console.log(arr)

//简化写法
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
//获取数组中的元素
for (let i = 0; i < arr.length; i++) {
  const index = arr.indexOf(arr[i], i + 1)
  if (index !== -1) {
    //出现重复内容
    arr.splice(index, 1)
    i--
  }
}
console.log(arr)

flatMap 来处理

//方法一:
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = arr.flatMap((item, index) => {
  if (arr.indexOf(item) === index) {
    return [item]; // 返回一个包含单个元素的数组
  } else {
    return []; // 返回一个空数组
  }
});
console.log(uniqueArr);


 //flatMap 方法期望回调函数返回一个数组,
 //如果在回调函数中某些元素不满足条件时没有返回数组
 //而是返回了 undefined,那么这些元素在最终的结果中会变成 undefined。这时候可以结合filter处理
 
 //方法二:
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = arr.flatMap((item, index) => {
  if (arr.indexOf(item) === index) {
    return item;
  }
});
const filteredArr = uniqueArr.filter((item) => {
  return item !== undefined && !Array.isArray(item);
});
console.log(filteredArr);

Set 来处理

//方法一:
//Set 和 Array.form 来处理
//使用 Set 创建了一个不包含重复元素的集合, 然后通过 Array.from 将其转换为数组。
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = Array.from(new Set(arr))
console.log(uniqueArr)

//方法二:
//   Set 和 拓展运算符 来处理
// 使用 Set 创建了一个不包含重复元素的集合,然后通过 ... 将其转换为数组。
const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = [...new Set(arr)]
console.log(uniqueArr)

filter 来处理

const arr = [1, 2, 1, 3, 3, 3, 2, 4, 5, 5, 6, 7];
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);
console.log('last---->', uniqueArr);

数组对象去重

const arr = [
  { id: 1, name: "xxxtentacion" },
  { id: 2, name: "amsxtyf" },
  { id: 2, name: "amsxtyf" },
  { id: 1, name: "xxxtentacion" },
  { id: 3, name: "xtyf" }
];

const uniqueArr = arr.filter((item, index) => {
  return (
    index ===arr.findIndex(obj => obj.id === item.id && obj.name === item.name)
  );
});

console.log(uniqueArr);
/* outPut:    [{"id":1,"name":"xxxtentacion"},
			  {"id":2,"name":"amsxtyf"},
			  {"id":3,"name":"xtyf"}]
*/





const arr = [
false,
false,
false,
NaN,
NaN,
NaN,
{ age: 1 },
{ age: 1 },
{ name: 1 },
null,
null,
null,
0,
0,
5,
5,
5,
6,
7,
7,
7,
0,
0,
undefined,
undefined,
undefined,
{},
{},
{},
'NaN',
'NaN',
'NaN',
true,
true,
true
];

function unique(arr) {
var obj = {};
return arr.filter(function (item, index, arr) {
let key;
if (item === null) {
key = 'null';
} else if (item === undefined) {
key = 'undefined';
} else {
key = typeof item === 'object' ? JSON.stringify(Object.keys(item)) : item;
}
return obj.hasOwnProperty(key) ? false : (obj[key] = true);
});
}

console.log(unique(arr));

outPut:
在这里插入图片描述

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值