繁体   English   中英

除了两个对象数组

[英]Except on two arrays of objects

如何在两个对象数组上执行 javascript“除外”?

我有这个数组:

arr = [
    {state: "FL"},
    {state: "NY"},
    {gender: "Male"},
    {gender: "Female"},
    {year: "1990"}
]

我有这个包含我需要排除的项目的数组:

excludeArr = [
    {state: "FL"},
    {gender: "Male"},
]

所需的数组是这样的:

finalArr = [
    {state: "NY"},
    {gender: "Female"},
    {year: "1990"}
]

我试过了,但它返回了所有元素:

 var arr = [ {state: "FL"}, {state: "NY"}, {gender: "Male"}, {gender: "Female"}, {year: "1990"} ] var excludeArr = [ {state: "FL"}, {gender: "Male"}, ] var finalArr = arr.filter(function (o1) { const [key, val] = Object.entries(o1)[0]; return excludeArr.filter(element => { if(element[key] !== val) { return element } }); }); 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)));

您的代码无法正常工作,因为您在内循环中使用过滤器,而在您的内循环中使用element[key] !== val as if 条件总是会导致返回一些值,而这些值又会根据提供的值变为真输入。

您可以将代码更改为这样的内容。 在这里,我正在使用一些来检查excludeArr arr值是否存在

 var arr = [{state: "FL"},{state: "NY"},{gender: "Male"},{gender: "Female"},{year: "1990"}] var excludeArr = [{state: "FL"},{gender: "Male"},] var finalArr = arr.filter(ele => !excludeArr.some(inner => Object.values(ele)[0] === Object.values(inner)[0])) console.log(finalArr)

你快到了。 您不想过滤排除数组,而是想检查其中的任何元素是否与您要检查的元素具有相同的键和值。

 var arr = [ {state: "FL"}, {state: "NY"}, {gender: "Male"}, {gender: "Female"}, {year: "1990"} ] var excludeArr = [ {state: "FL"}, {gender: "Male"}, ] var finalArr = arr.filter(function (o1) { const [key, val] = Object.entries(o1)[0]; return !excludeArr.some( element => element[key] === val ); }); console.log(finalArr)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM