首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何根据2个属性删除数组中的重复对象和原始值?

要根据两个属性删除数组中的重复对象和原始值,可以使用JavaScript中的Array.prototype.filter()方法结合Map对象来实现。以下是一个示例代码:

代码语言:txt
复制
function removeDuplicates(arr, prop1, prop2) {
  const map = new Map();
  return arr.filter(item => {
    const key = `${item[prop1]}-${item[prop2]}`;
    if (map.has(key)) {
      return false;
    } else {
      map.set(key, true);
      return true;
    }
  });
}

// 示例数组
const data = [
  { id: 1, name: 'Alice', age: 25 },
  { id: 2, name: 'Bob', age: 30 },
  { id: 3, name: 'Alice', age: 25 },
  { id: 4, name: 'Charlie', age: 35 },
  { id: 5, name: 'Bob', age: 30 }
];

// 删除重复对象
const uniqueData = removeDuplicates(data, 'name', 'age');
console.log(uniqueData);

解释

  1. removeDuplicates函数:
    • 接受三个参数:数组arr,以及两个属性名prop1prop2
    • 使用Map对象来存储已经遇到的键值对。
    • 使用filter方法遍历数组,对于每个元素,生成一个由两个属性值组成的唯一键(例如name-age)。
    • 如果这个键已经存在于Map中,则过滤掉该元素;否则,将其添加到Map中并保留该元素。
  • 示例数组:
    • 包含一些具有重复nameage属性的对象。
  • 调用removeDuplicates函数:
    • 传入示例数组和两个属性名nameage
    • 输出结果是一个去重后的数组。

应用场景

  • 这种方法适用于需要根据多个属性去重数组对象的场景,例如在数据处理、数据清洗、去重统计等。

参考链接

通过这种方法,你可以有效地根据两个属性删除数组中的重复对象和原始值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何删除 JavaScript 数组

falsy 有时写作 falsey 在 JavaScript 中有很多方法可以从数组删除元素,但是从数组删除所有虚最简单方法是什么?...为了回答这个问题,我们将仔细研究 truthy 与 falsy 类型强制转换。 ---- 算法说明 从数组删除所有虚。...解决方案:.filter( ) Boolean( ) 理解问题:我们有一个作为输入数组。目标是从数组删除所有的虚然后将其返回。...换句话说,.filter() 遍历数组每个元素并保留通过其中某个测试所有元素。数组未通过该测试所有元素都被过滤掉了 —— 被删除了。...知道如果我们将输入数组每个都转换为布尔,就可以删除所有为 false 元素,这就满足了此挑战要求。 算法: 确定 arr 哪些是虚删除所有虚

9.5K20
  • js给数组添加数据方式js 向数组对象添加属性属性

    参考:https://www.cnblogs.com/ayaa/p/14732349.html js给数组添加数据方式有以下几种: 直接利用数组下标赋值来增加(数组下标起始是0) 例,先存在一个有...(5,8,9); console.log(arr);  此时输出结果是[ 1, 2, 3, 5, 8, 9 ]; 通过 数组名.unshift(参数)来增加从数组第1个数据开始参数,unshift可以带多个参...用 数组名.splice(开始插入下标数,0,需要插入参数1,需要插入参数2,需要插入参数3……)来增加数组数据 let arr=[1,2,3]; //splice(第一个必需参数:该参数是开始插入...\删除数组元素下标,第二个为可选参数:规定应该删除多少元素,如果未规定此参数,则删除从 第一个参数 开始到原数组结尾所有元素,第三个参数为可选参数:要添加到数组新元素) let result=arr.splice...(3,0,7,8,9) console.log(arr);  此时输出结果是[ 1, 2, 3, 7, 8, 9 ]; 因为举例是从第3个下标开始,所以是直接在数组最后开始增加数组内容; js 向数组对象添加属性属性

    23.4K20

    如何高效删除 JavaScript 数组重复元素?

    在日常编程,我们经常会遇到数组去重问题。今天,我们就来聊聊如何用JavaScript来优雅地解决这个问题。...问题描述 给定一个包含重复元素数组,我们希望创建一个新数组,其中只包含原始数组唯一。...使用对象特性优化 在处理大数组去重时,我们可以利用对象特性来提升性能。通过在对象记录数组元素,可以有效减少重复元素检查次数。...总结 在实际开发,选择合适数组去重方法非常重要。如果数组主要包含基本类型,使用 Set 是一种简洁高效选择。如果数组包含复杂结构对象,可以结合深度比较函数来确保去重准确性。...无论你选择哪种方法,都要根据具体应用场景和数据特点来决定。希望这些方法能帮助你在实际开发更优雅地解决数组去重问题。如果你有其他更好方法或建议,欢迎在评论区分享哦!

    13610

    将Js数组对象某个属性升序排序,并指定数组某个对象移动到数组最前面

    需求整理:   本篇文章主要实现是将一个数组对象属性通过升序方式排序,然后能够让程序可以指定对应数组对象移动到程序最前面。...: 23},{name: "小芳", Id: 18}];   首先把数组Id通过升序方式排序: //源数组 var arrayData= [{name: "夏明", Id:24}, {name:..., Id: 24 },{ name: "小红", Id: 25 }] 找到Id为23对象,移动到数组最前面去(注意Id唯一): 实现原理:因为移除数组对象需要找到对应数组对象下标索引才能进行移除...,现在我们需要移除Id=23对象,让其排到最前面去(先找到对象下标,然后把给数组对象赋值给temporaryArry临时数组,然后在通过下标移除newArrayData对象,最后将arrayData...[currentIdx]); //移除数组newArrayId=23对象 newArrayData.splice(currentIdx,1);//从start[一般为对象索引]位置开始向后删除

    12.3K20

    【MySQL】面试官:如何查询删除MySQL重复记录?

    写在前面 最近,有小伙伴出去面试,面试官问了这样一个问题:如何查询删除MySQL重复记录?相信对于这样一个问题,有不少小伙伴会一脸茫然。那么,我们如何来完美的回答这个问题呢?...如何删除MySQL重复记录?另一种理解为:如何查询并删除MySQL重复记录? 没关系,不管怎么理解,我们今天都要搞定它!! 为了小伙伴们更好理解如何在实际工作解决遇到类似问题。...这里,我就不简单回答标题问题了,而是以SQL语句来实现各种场景下,查询删除MySQL数据库重复记录。...三、举例 1、查找表多余重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from...people group by peopleId having count(peopleId) > 1) 2、删除多余重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid

    5.9K10

    TypeScript 基础类型:原始类型、对象类型、数组类型、元组类型、枚举类型联合类型

    TypeScript 强大类型系统使得开发者能够更轻松地编写可维护、可扩展代码。本文将详细介绍 TypeScript 基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型联合类型。...例如:let nothing: null = null; // 空类型let nul: null = null; // 空类型对象类型对象类型用于表示非原始数据类型,包括对象数组、函数等。...可以使用 object 关键字来声明对象类型。对象类型对象类型用于表示一个对象,其中包含多个键值对。可以使用 {} 或者 object 关键字来声明对象类型。对象类型可以指定属性属性类型。...类型推断类型断言TypeScript 具有强大类型推断能力,它可以根据上下文自动推断变量类型。例如,如果我们在定义变量时直接赋值,TypeScript 可以推断出变量类型。...总结本文详细介绍了 TypeScript 基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型联合类型等方面。

    57530

    JS对象那些事儿

    任何不是原始东西都是Object。这包括数组,函数,构造函数对象本身。 对象 从概念上讲,对象在所有编程语言中都是相同。它们使用具有属性方法代码来表示真实世界。...要删除对象属性,我们可以使用delete关键字,来执行此操作。 ? 如果成功删除属性,则返回delete为true。否则,它将是错误如何迭代对象属性?...如何检查对象属性是否存在 有三种方法可以检查对象是否存在属性。 1. 使用hasOwnProperty。此方法返回一个布尔,表示对象本身是否具有指定属性,而不是父/继承属性。 ?...在javascript上下文中,所有原始数据类型都是通过方法分配内存,对于一个对象,可以进行或引用传递,根据具体操作情况。 ? 什么是浅层深层复制/克隆对象?...newObj.b obj.b共享对象相同引用,没有制作单独副本,而是复制了对象引用。 在Deep copy,新对象将拥有自己一组键值对(与原始对象具有相同)而不是共享。

    2.4K10

    必知必会JavaScript前端面试题篇(二),不看后悔!

    • 其余数据类型可分为 原始数据类型 引用数据类型 • 原始数据类型存在栈(stack) ,占据空间小,大小固定,属于被频繁使用数据 • 引用数据类型存在堆(heap) ,占据空间大, 大小不固定...• 根据这个原则,0.1 0.2 二进制数相加,再转化为十进制数就是:0.30000000000000004。 • 如何让其相等?...对 JavaScript 来说,这个通常为 2-52,在 ES6 ,提供了Number.EPSILON属性,而它就是 2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON...为什么函数 arguments 参数是类数组而不是数组如何遍历类数组?...• 原因: • arguments 是一个对象,他属性是从 0 开始依次递增数字,还有 callee: 通过它可以调用函数自身 length 等属性,与数组类似,但是没有数组常见一些方法,例如

    10210

    python数据分析——数据预处理

    前言 python数据分析——数据预处理 数据预处理是数据分析过程不可或缺一环,它目的是为了使原始数据更加规整、清晰,以便于后续数据分析建模工作。...本小节后续案例中所用df数据如下,在案例中将不再重复展示。 【例】使用近邻填补法,即利用缺失最近邻居来填补数据,对df数据缺失进行填补,这种情况该如何实现?...本节主要从重复发现处理两方面进行介绍。 本节各案例所用到df数据如下,在各案例代码展示中将不再重复这部分内容。 【例】请使用Python检查df数据重复。...4.2处理异常值 了解异常值检测后,接下来介绍如何处理异常值。在数据分析过程,对异常值处理通常包括以下3种方法: 最常用方式是删除。 将异常值当缺失处理,以某个填充。...在本案例,首先使用arange方法创建数组arr,然后通过打属性查看数组数据类型。

    83410

    set跟map区别_oracle set用法

    1.Map是键值对,Set是集合,当然键可以是任何; 2.Map可以通过get方法获取值,而set不能因为它只有; 3.都能通过迭代器进行for…of遍历; 4.Set是唯一可以做数组去重...set只有,可以认为只有一个数据,并且set中元素不可以重复且自动排序。 Set Set对象允许你存储任何类型,无论是原始或者是对象引用。它类似于数组,但是成员都是唯一,没有重复。...Set函数可以接受一个数组(或者具有 iterable 接口其他数据结构)作为参数,用来初始化。 Set特殊 Set 对象存储总是唯一,所以需要判断两个是否恒等。...数组去重(利用扩展运算符) Map Map对象保存键值对。任何(对象或者原始) 都可以作为一个键或一个。构造函数Map可以接受一个数组作为参数。...MapObject区别 一个Object 键只能是字符串或者 Symbols,但一个Map 键可以是任意。 Map键值是有序(FIFO 原则),而添加到对象键则不是。

    76640

    教程笔记《JavaScript深入浅出》

    类型检测: typeof ***:基本类型检测 *** instanceof ***:复合类型检测,左操作数对象原型链上是否有右边构造函数prototype 二、表达式运算符 表达式是指能计算出任何可用程序单元..., 不允许重复属性 四、对象 对象结构:包含一系列无序属性,每个属性都有字符串key对应 创建对象对象字面量、new/原型链、Object.create 对象属性操作:读写  obj.x...或 obj['x']         异常  不存在等         删除  delete obj.x 或 delete obj['x'],重复删除为true,原型链上属性不能删除         ...数组有length属性数组对象属性数组 VS 字符串 字符串类数组,有str.sharAt(x)按索引查找,也有length属性 六、函数作用域 函数概念:定义一次可调用多次javascript...this 作为对象方法函数this 对象原型链上this get/set方法this 构造器this call/apply方法this bind方法this 函数属性 & arguments

    85160

    你根本不懂Javascript(EP1~EP3.5 基础课)

    包装对象原始 内置对象 Boolean Number String 包装对象 如何区分原始对象包装对象 不可变原始可变对象引用 对象转换为原始 toString()...这个创建临时对象就成为包装对象如何区分原始对象包装对象 Javascript 会在必要时将包装对象转换为原始因此显示创建对象其对应原始常常但不总是表现一样。...不可变原始可变对象引用 Javascript 原始(undefined、null、布尔、数字字符串)与对象(包括数组函数)有着根本区别。...重复声明遗漏声明 使用 var 语句多次声明同一个变量不仅是合法,而且也不会造成任何错误。 如果重复声明有一个初始,那么它担当不过是一个赋值语句角色。...例如数组、函数、日期等等 数组对象 根据 JS 解释器所嵌入宿主环境(例如 Web 浏览器)决定 自定义对象 运行 JS 代码创建对象 只有属性 直接在对象定义属性 继承属性对象原型定义属性

    1K20
    领券