不一样的数组去重

前言

数组去重是道非常高频的面试题目,大部分都是对数组中的数字进行去重操作,相信大家都轻车熟路了。哪如果数组中每个元素都是是对象,应该怎样进行去重操作呢?


  • 下面是目标数组
let targetArr = [
    { id: '1', name: 'Tom'},
    { id: '2', name: 'jack'},
    { id: '3', name: 'xiaohua'},
    { id: '2', name: 'jack'},
    { id: '3', name: 'xiaohua'},
    { id: '4', name: 'dw'},
    { id: '2', name: 'jack'},
    { id: '3', name: 'xiaohua'},
    { id: '4', name: 'dw'},
    { id: '2', name: 'jack'}
]    
  • 使用Map存储不重复数据的特征

let map = new Map();
targetArr.forEach(item => {
    if(!map.has(item.id)) {
        map.set(item.id, item);
    }
})
console.log([...map.values()])
  • 使用filterfindIndex结合

targetArr = targetArr.filter((item,idx) =>{
    return targetArr.findIndex(item1 => item.id === item1.id) === idx
})
console.log(targetArr)
JavaScript数组去重,可以使用以下方法来去重id一样的元素: 1. 使用Set数据结构:Set是ES6中引入的新的数据结构,它可以自动过滤重复的元素。可以通过将数组转换为Set,然后再将Set转换回数组来实现去重。例如: ```javascript const arr = [1, 2, 2, 3, 4, 4]; const uniqueArr = Array.from(new Set(arr)); console.log(uniqueArr); // [1, 2, 3, 4] ``` 2. 使用filter方法和indexOf:使用filter方法结合indexOf方法来筛选出唯一的元素。例如: ```javascript const arr = [1, 2, 2, 3, 4, 4]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); console.log(uniqueArr); // [1, 2, 3, 4] ``` 3. 使用reduce方法:使用reduce方法来遍历数组,将不重复的元素添加到一个新数组中。例如: ```javascript const arr = [1, 2, 2, 3, 4, 4]; const uniqueArr = arr.reduce((result, item) => { if (!result.includes(item)) { result.push(item); } return result; }, []); console.log(uniqueArr); // [1, 2, 3, 4] ``` 以上是三种常用的方法来去重id一样的元素。根据不同的需求和数据类型,可以选择适合的方法进行数组去重。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [es6 数组去重_JS数组去重的9种方法(包括去重NaN和复杂数组类型)](https://blog.csdn.net/weixin_39556590/article/details/110184997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值