当前位置:网站首页>JS 数组去重(含简单数组去重、对象数组去重)
JS 数组去重(含简单数组去重、对象数组去重)
2022-08-01 22:18:00 【朝阳39】
简单数组去重
简单数组:由基础数据类型元素组成的数组,如 [1,‘你好’,true]
方式一 : 利用Set去重
利用 Set 数据结构自动去重的特征实现
let oldList = [1, 2, 3, 3];
let newList = Array.from(new Set(oldList)); // 得到 [1, 2, 3]
类似写法如下:
function arrDistinct(arr){
const newArr = new Set(arr);
return [...newArr]
}
let list = [1,2,2,3,4,4]
console.log(arrDistinct(list))
方式二 : 嵌套循环,自己与自己对比,有重复则删掉
let arr = [1, 2, 3, 2, 2, 1, 3, 4, 2, 5];
//去除数组中重复的数字
for (let i = 0; i < arr.length; i++) {
/*获取当前元素后的所有元素*/
for (let j = i + 1; j < arr.length; j++) {
//判断两个元素的值是否相等
if (arr[i] == arr[j]) {
//如果相等则证明出现了重复的元素,则删除j对应的元素
arr.splice(j, 1);
//当删除了当前j所在的元素以后,后边的元素会自动补位
//使j自减,再比较一次j所在位置的元素
j--;
}
}
}
console.log(arr); // 结果为 [ 1, 2, 3, 4, 5 ]
方式三 : 将不重复的元素放入新数组
//思路:创建一个新数组,循环遍历,只要新数组中有老数组的值,就不用再添加了。
function arrDistinct(array) {
let newArr = [];
for (let i = 0; i < array.length; i++) {
//开闭原则
let bool = true;
//每次都要判断新数组中是否有旧数组中的值。
for (let j = 0; j < newArr.length; j++) {
if (array[i] === newArr[j]) {
bool = false;
}
}
if (bool) {
newArr[newArr.length] = array[i];
}
}
return newArr;
}
let oldList = [1, 2, 3, 4, 5, 2, 3, 4];
let newList = arrDistinct(oldList);
console.log(newList); // 结果 [ 1, 2, 3, 4, 5 ]
方式四 : 使用 lodash 的 uniq()
_.uniq([2, 1, 2]); // => [2, 1]
对象数组去重
对象数组:由对象组成的数组
function arrDistinctByProp(arr,prop){
//只返回第一次出现的,重复出现的过滤掉
return arr.filter(function(item,index,self){
return self.findIndex(el=>el[prop]==item[prop])===index
})
}
let list = [
{
key:'1',
name:'林青霞'
},
{
key:'2',
name:'张三丰'
},
{
key:'1',
name:'段誉'
},
{
key:'1',
name:'段誉'
}
]
//通过name属性去重
console.log(arrDistinctByProp(list,'name'))
另一种可能更容易理解,写法如下:
function soloArray(array, UID) {
let newArr = [];
let UIDlist = [];
array.forEach((item) => {
if (!UIDlist.includes(item[UID])) {
UIDlist.push(item[UID]);
newArr.push(item);
}
});
return newArr;
}
let oldList = [
{
ID: 1,
name: "王小虎",
age: 10,
},
{
ID: 2,
name: "张三",
age: 20,
},
{
ID: 2,
name: "张三",
age: 20,
},
{
ID: 3,
name: "李四",
age: 30,
},
];
let newList = soloArray(oldList, "ID");
console.log(newList);
边栏推荐
- blender3.2.1 unit setting
- 【C补充】链表专题 - 单向链表
- 小程序毕设作品之微信美食菜谱小程序毕业设计成品(5)任务书
- selenium无头,防检测
- Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (4) Opening Report
- NgRx Selector 的 Memoization 特性学习笔记
- 恒星的正方形问题
- User Experience | How to Measure User Experience?
- xctf attack and defense world web master advanced area web2
- Deep learning Course2 first week Practical aspects of Deep Learning exercises
猜你喜欢
[Niu Ke brush questions-SQL big factory interview questions] NO4. Travel scene (a taxi)
编曲软件FL studio20.8中文版功能和作用
今日睡眠质量记录74分
Mini Program Graduation Works WeChat Food Recipe Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
小程序毕设作品之微信体育馆预约小程序毕业设计成品(2)小程序功能
Flutter基础学习(一)Dart语言入门
还在纠结报表工具的选型么?来看看这个
联邦学习的框架搭建
SAP ABAP OData 服务如何支持删除(Delete)操作试读版
【牛客刷题-SQL大厂面试真题】NO4.出行场景(某滴打车)
随机推荐
【C语言实现】整数排序-四种方法,你都会了吗、
图论——强连通分量缩点+拓扑排序
APP专项测试:流量测试
SRv6 L3VPN的工作原理
2022-08-01 第八组 曹雨 泛型 枚举
JS prototype hasOwnProperty in 加方法 原型终点 继承 重写父类方法
第3讲:MySQL数据库中常见的几种表字段数据类型
feel so stupid
xctf攻防世界 Web高手进阶区 web2
LeetCode952三部曲之二:小幅度优化(137ms -> 122ms,超39% -> 超51%)
leetcode 204. Count Primes 计数质数 (Easy)
Deep Learning Course2 Week 2 Optimization Algorithms Exercises
求解多元多次方程解的个数
联邦学习在金融领域的发展和应用
leetcode 204. Count Primes 计数质数 (Easy)
Postman 批量测试接口详细教程
一种灵活的智能合约协作方式
Prufer sequence
【建议收藏】ヾ(^▽^*)))全网最全输入输出格式符整理
用户体验 | 如何度量用户体验?