数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)

问题:在一个数组对象中添加对象,若添加的对象中任意一个属性的属性值与数组中任意一个对象中属性对应的属性值相同则不添加

function add(arr,itemObj){
            //arr要添加的数组对象  
            //itemObj添加的对象
            var s = true;//记录是否可以添加 初始为true可以
            var itemKeyArr2 = new Set(Object.keys(itemObj));//添加对象的keys值数组
            var itemValues2 = new Set(Object.values(itemObj));//添加对象的values值数组
            arr.forEach((e)=>{
                var itemKeyArr1 = new Set(Object.keys(e));//当前循环对象的keys值的数组
                var itemKeyArr = [...new Set([...itemKeyArr1].filter(x => itemKeyArr2.has(x)))];//2者的交集数组
                if(itemKeyArr.length!=0){
                    var itemValues1 = new Set(Object.values(e));//当前循环对象的values值的数组
                    var itemValues = [...new Set([...itemValues1].filter(x => itemValues2.has(x)))];//2者的交集数组
                    if(itemValues.length>0){
                        s = false;
                        return false
                    }
                }
            })
            if(s){
                arr.push(itemObj)
            }
            console.log(arr);
        }

实例

var arr= [
    {
        name:"刘秀",
        age:54
    },
    {
        name:"秦始皇",
        age:60
    },
    {
        name:"李世民",
        age:62,
        assige:'唐太宗'
    }
];
var item = {
    name:"刘秀xxx",
    age:54
}
var item1 = {
      name:"张三",
      age:18
}
var item2 = {
    assige:"学生"
}
var item3 = {
    anit:"防伪"
}
var item4 = {
    name:"李世民",
    age:42,
    assige:'9999'
}
//item item4不可添加 item1 item2 item3可以添加

add(arr,item); 结果

数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)_第1张图片
image.png

add(arr,item1); 结果

数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)_第2张图片
image.png

add(arr,item2); 结果

数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)_第3张图片
image.png

add(arr,item3); 结果

数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)_第4张图片
image.png

add(arr,item4); 结果

数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加)_第5张图片
image.png

你可能感兴趣的:(数组对象中添加数组对象(若属性对应的属性值相同不添加反之添加))