JS对象数组中重复对象的过滤

本文介绍了如何使用JavaScript处理对象数组,包括过滤掉重复对象和根据另一数组过滤数据的方法。示例代码展示了如何利用for循环和filter方法实现这两个功能,帮助理解数组操作技巧。

JS对象数组中重复对象的过滤

数组的过滤一般有两种需求:
1.对象数组中过滤掉重复的数据。
2.有两组数组,一组为a,一组为b,要求过滤掉a组中在b组出现的数据。

需求1(对象数组中过滤掉重复的数据):

		let arr = [
            {"id":"1","name":"张三"},
            {"id":"2","name":"李四"},
            {"id":"1","name":"张三"}
        ];
        let newArr = [];
        let obj = {};
        for (let i = 0; i < arr.length; i++) {
            //将arr[i].id作为对象属性进行判断
            if (!obj[arr[i].id]){
                newArr.push(arr[i]);
                obj[arr[i].id] = true;
            }
        }
        //0: {id: "1", name: "张三"} 1: {id: "2", name: "李四"}
        console.log(newArr);

需求2(过滤掉a组中在b组出现的数据):

		let arr = [
            {"id":"1","name":"张三"},
            {"id":"2","name":"李四"},
            {"id":"3","name":"赵五"}
        ];
        let brr = [
            {"id":"1","name":"张三"},
            {"id":"6","name":"站六"}
        ];
        /*filter,every的回调函数都有三个参数(value: T, index:number, arr: T[])*/
        let newArr = arr.filter(function (item) {
            return brr.every(function (item1) {
                return item.id != item1.id;
            })
        })
        //0: {id: "2", name: "李四"} 1: {id: "3", name: "赵五"}
        console.log(newArr);

        //可以简化为如下:
        let newArr2 = arr.filter(item => brr.every(item1 => item.id != item1.id));
        //0: {id: "2", name: "李四"} 1: {id: "3", name: "赵五"}
        console.log(newArr2);

        //相当于如下:
        let newArr3 = [];
        for (let i=0; i<arr.length; i++){
            let flag = true;
            for (let j = 0; j < brr.length; j++) {
                if (arr[i].id == brr[j].id){
                    flag = false;
                    break;
                }
            }
            if (flag) newArr3.push(arr[i]);
        }
        //0: {id: "2", name: "李四"} 1: {id: "3", name: "赵五"}
        console.log(newArr3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值