Javascript 除了两个对象数组之外
如何在两个obejct数组上执行javascript“except” 我有这个阵列:Javascript 除了两个对象数组之外,javascript,Javascript,如何在两个obejct数组上执行javascript“except” 我有这个阵列: arr = [ {state: "FL"}, {state: "NY"}, {gender: "Male"}, {gender: "Female"}, {year: "1990"} ] 我有一个数组,其中包含我需要排除的ITEN: excludeArr = [ {state: "FL"}, {gender: "Male"}, ] 所需的阵列如下所示:
arr = [
{state: "FL"},
{state: "NY"},
{gender: "Male"},
{gender: "Female"},
{year: "1990"}
]
我有一个数组,其中包含我需要排除的ITEN:
excludeArr = [
{state: "FL"},
{gender: "Male"},
]
所需的阵列如下所示:
finalArr = [
{state: "NY"},
{gender: "Female"},
{year: "1990"}
]
我尝试了这个,但它返回了所有元素:
var-arr=[
{州:“FL”},
{州:“纽约”},
{性别:“男性”},
{性别:“女性”},
{年份:“1990年”}
]
var excludeArr=[
{州:“FL”},
{性别:“男性”},
]
var finalArr=arr.filter(函数(o1){
常量[key,val]=对象项(o1)[0];
返回excludeArr.filter(元素=>{
if(元素[键]!==val){
返回元素
}
});
});
console.log(finalArr)
您可以使用Array.filter()
方法:
finalArr = arr.filter(function(obj){
return !excludeArr.map(x => JSON.stringify(x)).includes(JSON.stringify(obj));
});
或作为一个班轮:
finalArr = arr.filter(obj => !excludeArr.map(x => JSON.stringify(x)).includes(JSON.stringify(obj)));
您的代码不起作用,因为您在内部循环中使用过滤器,并且在内部循环中使用
元素[key]!==val
好像总是导致返回某些值的条件,而这些值又根据提供的输入变为真
您可以将代码更改为类似这样的内容。这里我使用检查arr
内部excludeArr
var arr=[{州:“佛罗里达州”},{州:“纽约州”},{性别:“男性”},{性别:“女性”},{年份:“1990年”}]
var excludeArr=[{state:“FL”},{gender:“Male”},]
var finalArr=arr.filter(ele=>!excludeArr.some(内部=>Object.values(ele)[0]==Object.values(内部)[0]))
console.log(finalArr)
您就快到了。您不希望筛选排除数组,而是希望检查其中的任何元素是否与正在检查的元素具有相同的键和值
var-arr=[
{州:“FL”},
{州:“纽约”},
{性别:“男性”},
{性别:“女性”},
{年份:“1990年”}
]
var excludeArr=[
{州:“FL”},
{性别:“男性”},
]
var finalArr=arr.filter(函数(o1){
常量[key,val]=对象项(o1)[0];
return!excludeArr.some(element=>element[key]==val);
});
console.log(finalArr)
选择您喜欢的循环。:)我通常会把它和刺痛物体进行比较结合起来。人们对你的问题投了否决票,因为你没有展示你尝试过的内容,也没有解释为什么它不起作用。数组包含对象,而不是原语,所以这不起作用<代码>{state:“FL”}内部arr与排除数组中的{state:“FL”}
对象不同。您必须将其与比较对象的方法相结合。谢谢您。我没有注意到问题的数组包含对象,而不是直接可比较的值。感谢您发布我的首选版本。:)