javascript中过滤二维对象数组重复的字段并只保留唯一值(array.filter与Array.from)

javascript中过滤二维对象数组重复的字段并只保留唯一值

  • 1.Array.filter过滤
    • `array.filter()`方法
  • 2.Array.from过滤
    • `Array.from`方法

1.Array.filter过滤

在JavaScript中,你可以使用Array.filter()Set数据结构来过滤二维对象数组中重复的字段,只保留唯一值。下面是一种可能的写法:

// 示例数据
const array = [{ id: 1, name: 'John' },{ id: 2, name: 'Jane' },{ id: 3, name: 'John' },{ id: 4, name: 'Alice' },{ id: 5, name: 'Jane' }
];// 使用 Set 过滤数组
const uniqueArray = array.filter((obj, index, self) =>index === self.findIndex((o) => (o.name === obj.name))
);console.log(uniqueArray);

在这里插入图片描述

在上面的例子中,我们使用Array.filter()方法来遍历数组,并使用Array.findIndex()方法找到第一个与当前对象相同名称的对象的索引位置。如此一来,只会保留第一个出现的对象,而将后续重复的对象过滤掉,得到的uniqueArray就是只包含唯一值的数组。

输出结果如下:

[{ id: 1, name: 'John' },{ id: 2, name: 'Jane' },{ id: 4, name: 'Alice' }
]

注意:上述方法只会过滤相同字段(这里是name)的对象,在本例中并不会过滤相同的id字段。如果你希望根据多个字段进行过滤,可以在Array.findIndex()的回调函数中增加适当的条件判断。

array.filter()方法

array.filter()是一个数组方法,用于创建一个新数组,其中包含满足指定条件的所有元素。它接受一个回调函数作为参数,并在每个数组元素上调用该函数。回调函数需要返回一个布尔值来确定是否保留该元素。

array.filter()的语法如下:

array.filter(callback(element[, index, [array]])[, thisArg])

其中:

  • callback:必需,表示用于测试每个元素的函数。
    • element:当前被处理的元素。
    • index(可选):当前元素在数组中的索引。
    • array(可选):调用filter方法的数组。
  • thisArg(可选):用来执行回调函数时的this值。

下面是一个简单的示例,演示如何使用array.filter()方法:

const numbers = [1, 2, 3, 4, 5];const evenNumbers = numbers.filter((num) => num % 2 === 0);console.log(evenNumbers); // [2, 4]

在上面的例子中,我们定义了一个回调函数(num) => num % 2 === 0,用于测试每个数字是否是偶数。array.filter()方法会遍历数组中的每个元素,并将回调函数应用于每个元素。仅当回调函数返回true时,相应的元素才会被保留在新数组evenNumbers中。

注意,array.filter()会返回满足条件的元素组成的新数组,原始数组不受影响。

2.Array.from过滤

const arr = [{ id: 1, name: 'John' },{ id: 2, name: 'Jane' },{ id: 3, name: 'John' },{ id: 4, name: 'Kate' },{ id: 5, name: 'Jane' }
];// 使用Set和map进行去重
const uniqueArr = Array.from(new Set(arr.map(obj => obj.name))).map(name => {return arr.find(obj => obj.name === name);
});console.log(uniqueArr);

在这里插入图片描述

Array.from方法

使用Array.from方法可以将类数组对象或可迭代对象转换为数组。它的语法如下:

Array.from(arrayLike[, mapFn[, thisArg]])

其中:

  • arrayLike:要转换为数组的类数组对象或可迭代对象。
  • mapFn(可选):一个映射函数,可以对每个元素进行操作或转换。
  • thisArg(可选):可选地设置映射函数中的this值。

下面是一些示例,演示了不同情况下使用Array.from的写法:

  1. 将类数组对象转换为数组:
const arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
const array = Array.from(arrayLike);console.log(array); // ['a', 'b', 'c']
  1. 对可迭代对象进行操作:
const iterable = 'hello';
const array = Array.from(iterable, char => char.toUpperCase());console.log(array); // ['H', 'E', 'L', 'L', 'O']
  1. 使用箭头函数设置this值:
const arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
const array = Array.from(arrayLike,function (element) {// this 指向 objectreturn element.toUpperCase() + this.postfix;},{ postfix: '!' }
);console.log(array); // ['A!', 'B!', 'C!']

以上是Array.from的基本用法。你可以根据具体需求来调整mapFnthisArg参数,以便对转换后的数组进行进一步的操作和处理。


@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java日期类

日期类 第一代日期类: 1、Date:精确到毫秒,代表特定的瞬间 2、SimpleDateFormat: **格式化和解析日期的具体类,**它允许进行:格式化(日期 → 文本) 解析(文本 → 日期) 和 规范化。 3、常用的使用方法…

SpringBoot源码分析(6)--SpringBootExceptionReporter/异常报告器

文章目录 一、前言二、异常报告器介绍2.1、作用2.2、接口定义2.3、FailureAnalyzer错误分析器2.4、FailureAnalysisReporter错误报告器 三 、SpringBootExceptionReporter源码分析四、shutdownHook介绍4.1、背景4.2、什么是Shutdown Hook4.3、什么时候会调用Shutdown Hook4.4、…

NUXT3学习笔记2

1、配置Ant design Vue (两个安装方式随便选一种,yarn会安装的更快) npm i ant-design-vue --save yarn add ant-design-vue 2、使⽤的 Vite,你可以使⽤ unplugin-vue-components 来进⾏按需加载。 yarn add unplugin-vue-components --save 在nuxt.…

第一阶段-第十一章 Python基础的综合案例(数据可视化-地图可视化)

目录 一、基础地图使用  1.学习目标  2.视觉映射器  3.本节的演示二、疫情地图-国内疫情地图  1.案例效果  2.函数的语法  3.本节的代码演示三、疫情地图-省级疫情地图  1.案例效果  2.本节的代码演示 说明:该文章是学习 黑马程序员在B站上分享的视…

【c++修行之路】IO流架构及使用

文章目录 前言输入输出库文件读写序列化与反序列化结语 前言 大家好久不见,今天一起来学习c中的IO流。 输入输出库 这两张架构图略显复杂,这里给出一张比较清楚的IO流架构图: 也就是说,我们平时使用的诸如cin、cout、cerr、cl…

python selenium.webdriver 爬取政策文件

文章目录 获取文章链接批量爬取政策文件应用selenium爬取文件信息数据处理导出为excel 获取文章链接 获取中央人民政府网站链接,进入国务院政策文件库,分为国务院文件和部门文件(发改委、工信部、交通运输部、市场监督局、商务部等&#xff…

QT实现按钮开关Form窗体的效果

实现效果叙述如下: MainWindow中的按钮实现Form窗体的开关,Form窗体的关闭按钮禁用掉,只允许使用窗体按钮进行,且关闭MainWindow按钮时Form窗体随之关闭。 注意: 要想实现关闭MainWindow按钮时Form窗体随之关闭&#x…

k8s之Pod容器资源限制

目录 一、Pod 容器的资源限制二、CPU 资源单位三、内存资源单位四、为本地临时性存储设置请求和限制五、总结 一、Pod 容器的资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。 当为…

arcgis拓扑检查

不能有悬挂点 不能有伪结点***路网处理很重要,看研究吧。 一直默认到最后。 导入要素类,单个 toupu2右键新建拓扑(T) 一般选不能有悬挂点,不能重叠。 一路默认 是 拉进图层可视化 线要素的话记得添加字段length&#…

Ghost Buster Pro for mac(快速清理卸载的应用残存文件)

Ghost Buster Pro for mac可从您已卸载的应用程序中查找并删除文件。该应用程序速度快如闪电,可立即释放内存。 许多应用程序都安装在计算机上,但它们通常只会在您的计算机上停留很短的时间。每个应用程序都会创建文件,但删除应用程序不会删…

编码器旋转圈数和单圈计数值计算功能块(SMART PLC梯形图)

有关 PLC的编码器更多应用请参看专栏其它文章,常用链接如下: 西门子SMART PLC高速脉冲计数采集编码器速度(RC滤波)_编码器频率采集计算速度采用什么滤波方法_RXXW_Dor的博客-CSDN博客这篇文章主要讲解西门子 SMART PLC高速计数采集编码器脉冲信号计算速度,根据编码器脉冲数…

【vs code插件推荐】快捷生成 console.log

使用这个插件可以直接双击选中你的变量名 然后使用快捷键 ctrl alt l 即可快速生成 时小记,终有成。