Javascript 比较2个对象数组和筛选结果数组

Javascript 比较2个对象数组和筛选结果数组,javascript,arrays,object,Javascript,Arrays,Object,如果Input2中的产品和角色对象required键为false,则应从input1中删除产品和角色 如果所需的任何一项为true,则不应删除产品和角色 在input2中,如果存在除产品或角色以外的对象,则只应显示input1中的属性,否则应删除该对象 input1=[ {名称:“基本细节”,说明:“abc”}, {name:“产品和角色”,value:“def”}, {name:“Attributes”,value:“ghi”} ]; 输入2=[ {键:“产品”,类型:,值:,必需:false

如果Input2中的产品和角色对象
required
键为
false
,则应从input1中删除
产品和角色

如果所需的任何一项为
true
,则不应删除
产品和角色

在input2中,如果存在除
产品
角色
以外的对象,则只应显示input1中的属性,否则应删除该对象

input1=[
{名称:“基本细节”,说明:“abc”},
{name:“产品和角色”,value:“def”},
{name:“Attributes”,value:“ghi”}
];
输入2=[
{键:“产品”,类型:,值:,必需:false,必需:false},
{键:“角色”,类型:,值:,必需:false,必需:false},
{key:“sad”,type:“text”,value:,必需:false,必需:false},
];
预期产量

input1=[
{名称:“基本细节”,说明:“abc”},
{name:“Attributes”,value:“ghi”}
];
input2.filter(elm=>{
if(elm.key==='Product'&&&!elm.required){
input1.filter(el=>el.name!==“产品和角色”);
}
});
控制台日志(输入1);

根据您的要求,下面的代码可以解决您的问题

input1=[{
名称:“基本细节”,
说明:“abc”
},
{
名称:“产品和角色”,
值:“def”
},
{
名称:“属性”,
价值:“ghi”,
},
]
输入2=[{
关键词:“产品”,
类型:“,
值:“”,
必填项:false,
强制性:错误
},
{
关键:“角色”,
类型:“,
值:“”,
必填项:false,
强制性:错误
},
{
关键:“悲伤”,
键入:“文本”,
值:“”,
必填项:false,
强制性:错误
},
]
让productIndex=input2.findIndex(ele=>{
返回ele.key===“产品”;
});
让rolesIndex=input2.findIndex(ele=>{
返回ele.key==='Roles';
});
让otherIndex=input2.findIndex(ele=>{
返回ele.key!==“产品”和&ele.key!==“角色”;
})
如果(productIndex!=-1&&RoleIndex!=-1&&input2[productIndex]。必需===false&&input2[RoleIndex]。必需===false){
input1=input1.filter(el=>el.name!==“产品和角色”);
}
如果(其他索引==-1){
input1=input1.filter(el=>el.name!=='Attributes');
}

控制台日志(输入1)
我们可以过滤input2元素,得到那些
键为“产品”或“角色”且不需要的元素

如果结果长度为2,则满足条件,input1是input1的元素,
没有“产品和角色”的名称。

input1=[
{名称:“基本细节”,说明:“abc”},
{name:“产品和角色”,value:“def”},
{名称:“属性”,值:“ghi”},
]
输入2=[
{键:“产品”,类型:,值:,必需:false,必需:false},
{键:“角色”,类型:,值:,必需:false,必需:false},
{key:“sad”,type:“text”,value:,必需:false,必需:false},
]
if(input2.filter)(elm=>{
return(elm.key=='Product'| | elm.key==='Roles'&&&!elm.required)
})。长度==2){
input1=input1.filter(elm=>elm.name!='Products and Roles')
}

console.log(input1)
您的代码没有错,但您忘记了一些东西…,请检查下面代码段中的编辑并运行代码段

input1=[
{名称:“基本细节”,说明:“abc”},
{name:“产品和角色”,value:“def”},
{name:“Attributes”,value:“ghi”}
];
输入2=[
{键:“产品”,类型:,值:,必需:false,必需:false},
{键:“角色”,类型:,值:,必需:false,必需:false},
{key:“sad”,type:“text”,value:,必需:false,必需:false},
];
input2.filter(elm=>{
if(['Product','Roles'].包括(elm.key)&&&!elm.required){
input1=input1.filter(el=>el.name!==“产品和角色”);
}
});

控制台日志(输入1)
您可以根据每个
input1
名称筛选
input2
,并决定按如下方式离开或删除

let input1=[
{名称:“基本细节”,说明:“abc”},
{name:“产品和角色”,value:“def”},
{name:“Attributes”,value:“ghi”}
];
常量输入2=[
{键:“产品”,类型:,值:,必需:false,必需:false},
{键:“角色”,类型:,值:,必需:false,必需:false},
{key:“sad”,type:“text”,value:,必需:false,必需:false},
];
常量输出=输入1.过滤器((项)=>{
const matched=input2.filter((item2)=>item.name.includes(item2.key));
返回matched.length==0 | | matched.some((item2)=>item2.required);
});

控制台日志(输出)此代码比其他代码稍微通用一些,它将搜索您的input1数组,并且仅返回名称不包含input2中任何键的项目,或者如果它找到匹配项,则在找到任何关键字“必需”时将包含这些项。它使用下划线JS库

input1=[
{名称:“基本细节”,说明:“abc”},
{name:“产品和角色”,value:“def”},
{名称:“属性”,值:“ghi”},
]
输入2=[
{键:“产品”,类型:,值:,必需:false,必需:false},
{键:“角色”,类型:,值:,必需:false,必需:false},
{key:“sad”,type:“text”,value:,必需:false,必需:false},
]
let requiredItems=\过滤器(输入1,函数(项){
让words=item.name.split(“”);
let filters=u0.filter(input2,函数(filter){
let found=\查找(单词,函数(单词){
返回(filter.key.includes(word)| word.includes(filter.key));
});
如果(找到){
回流过滤器;
}
});
如果(!filters | | filters.length==0){
退货项目;
}
if(u.findWhere(过滤器,{required:true})){
退货项目;
}
});
欺骗