首页
学习
活动
专区
工具
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.5K20

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

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

    14310

    将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]); //移除数组newArray中Id=23的对象 newArrayData.splice(currentIdx,1);//从start[一般为对象的索引]的位置开始向后删除

    12.4K20

    【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 的基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型和联合类型等方面。

    79030

    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 等属性,与数组类似,但是没有数组常见的一些方法,例如

    10710

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

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

    94810

    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可以接受一个数组作为参数。...Map和Object的区别 一个Object 的键只能是字符串或者 Symbols,但一个Map 的键可以是任意值。 Map中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。

    77140
    领券