对于数组对象,根据指定的属性去重,并保留后一项

2024-04-30 11:20

本文主要是介绍对于数组对象,根据指定的属性去重,并保留后一项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

所需要去重的数组

var arr = [{ name: 'a', id: 1 },{ name: 'a', id: 2 },{ name: 'b', id: 3 },{ name: 'c', id: 4 },{ name: 'c', id: 5 },{ name: 'b', id: 6 },{ name: 'd', id: 7 }
];// 输出结果
/*[{name:'a', id:2},{name:'c', id:5},{name:'b', id:6},{name:'d', id:7},]
*/

方式一:使用双层for循环可直接修改原数组

// 首先将数组反转,这样可以从后往前遍历
arr.reverse();for (var i = 0; i < arr.length - 1; i++) {for (var j = i + 1; j < arr.length; j++) {if (arr[i].name === arr[j].name) {// 删除重复的元素,保留后者arr.splice(j, 1);// 因为删除了一个元素,所以要 j--j--;}}
}// 循环结束后再次将数组反转,恢复原顺序
arr.reverse();console.log(arr);

方式二:增加一个新数组,配合ES6的every方法

const temp = [];
arr.reverse().forEach((item) => {// 数组的every方法,只有所有的数据都满足条件的时候才会返回true,否则就为falsevar check = temp.every((obj) => {return item.name !== obj.name;})// 如果新数组中没有该项的时候,就把该项填进去check ? temp.push(item) : ''
})
console.log(temp.reverse());//方法3:使用es6的Map()
let map = new Map();
for (let item of arr.reverse()) {if (!map.has(item.name)) {map.set(item.name, item);}
}
arr = [...map.values()]
console.log(arr.reverse());

方式三:使用ES6的map方法

let map = new Map();
for (let item of arr.reverse()) {if (!map.has(item.name)) {map.set(item.name, item);}
}
arr = [...map.values()]
console.log(arr.reverse());

方式四:使用ES5的reduce方法

var obj = {};
arr = arr.reverse().reduce((acculturate, current) => {obj[current.name] ? '' : obj[current.name] = true && acculturate.push(current);return acculturate;
}, [])
console.log(arr.reverse());

reduce( function (初始值或计算后返回值,当前元素,索引,原数组) {

        // 代码块

}, 函数初始值)

其中必选的有:

  •  初始值或计算后返回值
  • 当前元素

其中可选的有

  • 索引
  • 原数组
  • 函数初始值

这篇关于对于数组对象,根据指定的属性去重,并保留后一项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948736

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja