数组对象去重方法

ArrdeepRemoval (arr, val) { //对象数组根据某一项去重 参数1 要去重的数组 参数2 健值
var obj = {};
let jsonArray = arr.reduce(function (item, next) {
obj[next[val]] ? ‘’ : obj[next[val]] = true && item.push(next);
return item;
}, []);
return jsonArray
}
在这里插入图片描述
在这里插入图片描述

JavaScript数组对象有多种方法,以下为你详细介绍: 1. **reduce方法**:未在给定引用中详细说明此方法的代码实现,但reduce是数组的一个高阶方法,可用于遍历数组并根据特定逻辑处理元素,在数组对象场景中,可通过比较对象的属性来决定是否保留元素。 2. **利用原生js+空对象+空数组**:该方法未给出具体代码实现,基本思路是使用一个空对象来记录已经出现过的对象特征,通过遍历数组对象,检查对象特征是否已存在于空对象中,若不存在则添加到空数组中。 3. **利用原生js+标志位+空数组**:同样未给出具体代码,其原理是使用标志位来标记对象是否已经出现过,遍历数组对象时,根据标志位判断是否将对象添加到空数组中。 4. **利用双指针思想+splice方法**:利用双指针遍历数组,通过`splice`方法删除复的对象。不过引用中未给出详细代码。 5. **使用Set数据结构**:将数组对象转为Set对象,再将Set对象转回数组即可实现。示例代码如下: ```javascript const arr = [{name: 'Alice', age: 20}, {name: 'Bob', age: 30}, {name: 'Alice', age: 20}]; const uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse); console.log(uniqueArr); ``` 此方法先将数组对象中的每个对象转换为字符串,利用Set的特性复的字符串,再将字符串转换回对象[^3]。 6. **按对象某一属性**:定义一个函数,函数的参数传入对象中的一个属性,按传进来的属性进行。示例代码如下: ```javascript function removeSame(arr, prop) { let map = new Map(); for (let item of arr) { if (!map.has(item[prop])) { map.set(item[prop], item); } } return [...map.values()]; } ``` 使用示例: ```javascript const arr = [ { id: 1, name: 'John' }, { id: 2, name: 'Jane' }, { id: 1, name: 'John' } ]; const uniqueArr = removeSame(arr, 'id'); console.log(uniqueArr); ``` 该函数通过`Map`对象来记录已经出现过的属性值,若属性值未出现过,则将对象存入`Map`,最后返回`Map`中的所有值,实现按指定属性[^4]。 7. **使用filter方法结合对象属性比较**:虽然引用未提及,但可以通过`filter`方法结合对象属性比较来实现。示例代码如下: ```javascript const arr = [ { id: 1, name: 'John' }, { id: 2, name: 'Jane' }, { id: 1, name: 'John' } ]; const uniqueArr = arr.filter((item, index, self) => index === self.findIndex(t => t.id === item.id) ); console.log(uniqueArr); ``` 该方法使用`filter`方法遍历数组,对于每个元素,通过`findIndex`方法查找第一个具有相同`id`的元素的索引,若当前元素的索引等于该索引,则保留该元素,否则过滤掉。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值