对象数组合并和去重

数组去重:

普通字符串/数字数组去重:

1. 利用Set的特性 => new Set(arr)

2. for遍历, indexOf判断是否存在

3. 利用对象去重,  因为对象的key有唯一性

4. Map也可以用于去重

 

数组合并:

可以使用克隆(克隆, 深克隆的那些方法)

 

对象数组去重:

1. Set(遍历存下唯一的key的set数据)+filter

// 对象数组去重(Set+filter)
function uniqueArr(arr = [], key) {
    const keyVals = new Set();
    return arr.filter(obj => {
        val = obj[key];
        if(keyVals.has(val)) return false
        keyVals.add(val)
        return true
    })
}

5154fd502f044f7e95b5fbca5611e647.png

2. Map+filter(大体思路同上)

function uniqueArr(arr = [], key) {
    const keyVals = new Map();
    return arr.filter(obj => {
        val = obj[key];
        if(keyVals.has(val)) return false
        keyVals.set(val) // keyVals.set第二个参数若不传, 会默认为第二个参数是undefined, 但是还是可以通过has方法判断有没有存入key数据的
        return true
    })
}

 

 3. for循环, find或者findIndex判断是否存在, 然后不存在就push

// 对象数组合并+去重
function mergeArray(arr1, arr2) {
    // 克隆
    var arr= arr1.slice(0)
    var  v
    for(let i in arr2) {
        v = arr2[i]
        if(~arr.findIndex(ee=>ee.id === v.id)) {
            continue
        }
        arr.push(v)
    }
    return arr
}
const arr1 = [{id: 1}, {id: 2}, {id:3}]
const arr2 = [{id: 3}, {id: 4}, {id: 3}, {id:5}]
// 合并+去重
console.log(mergeArray(arr1, arr2))
// 单纯给arr2数组去重--mergeArray的第一个参数传[], 第二个传需要去重的数组
console.log(mergeArray([], arr2))

6ee3d4bb176e4034ba10f7444bd67899.png

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,可以使用以下代码来合并和去对象数组: ```javascript function mergeAndDistinct(jsonArray1, jsonArray2) { let mergedArray = jsonArray1.concat(jsonArray2); let distinctArray = []; for (let i = 0; i < mergedArray.length; i++) { let flag = true; for (let j = 0; j < distinctArray.length; j++) { if (JSON.stringify(mergedArray[i]) === JSON.stringify(distinctArray[j])) { flag = false; break; } } if (flag) { distinctArray.push(mergedArray[i]); } } return distinctArray; } ``` 这段代码接受两个对象数组作为参数,将它们合并为一个数组,并去除复的对象。它使用嵌套的循环来比较每个对象是否已存在于新数组中,如果不存在,则将其添加到新数组中。最后,返回新数组作为结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JS对象数组合并?](https://blog.csdn.net/weixin_35696012/article/details/114317473)[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: 50%"] - *3* [Javascript 【基础】对象数组](https://blog.csdn.net/qq_31254489/article/details/109540976)[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: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值