js得到数组A减去数组B的结果

这篇博客介绍了如何在JavaScript中使用forEach、filter和reduce方法来从一个数组中移除与另一个数组中存在的对象。示例中展示了如何比较两个对象数组,保留不在第二个数组中的元素。方法一是使用forEach和find,方法二是利用filter,方法三是结合reduce和find操作。这些技巧对于处理和过滤复杂数据结构非常有用。
摘要由CSDN通过智能技术生成
  // 题意 例如arr1=[1,2,3,4,5] arr2=[1,2]  arr1减去arr2的结果就是 [3,4,5]
        var arr1 = [
            {
                name: 'zs',
                id: 18
            },
            {
                name: 'xiaoming',
                id: 20
            },
            {
                name: 'lisi',
                id: 22
            },
            {
                name: 'ww',
                id: 25
            },
            {
                name: 'liga',
                id: 26
            }
        ]

        var arr2 = [
            {
                name: 'zs',
                id: 18
            },
            {
                name: 'xiaoming',
                id: 20
            },
        ]
        // 方法一
        function myRemove(arr1, arr2) {
            var newArr = []
            arr1.forEach(function (obj1, index) {
                var findRet = arr2.find(function (obj2) {
                    return obj1.id === obj2.id
                })
                if (!findRet) {
                    newArr.push(obj1)
                }
            })
            return newArr
        }
        // 方法二
        function myRemove2(arr1, arr2) {
            return arr1.filter(function (obj1, index) {
                return !arr2.find(function (obj2) {
                    return obj1.id === obj2.id
                })
            })
        }

        // 方法三
        console.log(
            arr1.reduce((arr, item) => {
                var findRet = arr2.find(function (obj) {
                    return item.id === obj.id
                })
                // return的值会被当成下一次循环的sum
                if (!findRet) {
                    arr.push(item)
                }
                return arr
            }, [])
        );

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值