问题:在一个数组对象中添加对象,若添加的对象中任意一个属性的属性值与数组中任意一个对象中属性对应的属性值相同则不添加
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); 结果
add(arr,item1); 结果
add(arr,item2); 结果
add(arr,item3); 结果
add(arr,item4); 结果