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

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 pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一