有没有一种方法可以根据数组内的标志过滤数组

时间:2018-12-24 14:00:49

标签: javascript reactjs filter

我正在尝试根据标志isSome: true过滤数组。我想过滤该数组中不存在该标志的情况

var value = [
      { "somevalues": {},
        "moreDetails": {
          "isSome": "true"
        }
      },
      { "somevalues": {},
        "moreDetails": {}
      },
      { "somevalues": {},
        "moreDetails": {}
      },
    ]
const valuewithisSome = value.filter(o => o.moreDetails &&  o.moreDetails.isSome);
const valuewithoutisSome = value.filter(o => o.moreDetails &&  !o.moreDetails.isSome);
console.log(valuewithisSome);
console.log(valuewithoutisSome);

valuewithisSome正常工作,并返回isSome: true数组。

valuewithoutisSome不能按预期方式工作,因为我不想在morevalues数组中传递isSome false,是否有一种方法可以在不传递该标志的情况下进行过滤?

2 个答案:

答案 0 :(得分:1)

您已经拥有的“无”代码应该可以工作:

const valuewithoutisSome = value.filter(o => o.moreDetails &&  !o.moreDetails.isSome);

如果缺少“ isSome”属性或显式为false-y,则表达式o.moreDetails.isSome将得出undefined,因此,在这种情况下,!o.moreDetails.isSome将是true。 / p>

现在这将起作用,但是,如果您想在实际存在的属性中显式测试是否为 only ,则可以执行以下操作:

const valuewithoutisSome = value.filter(o => 
  o.moreDetails &&
  (!("isSome" in o.moreDetails) || !o.moreDetails.isSome)
);

当存在“ isSome”属性时,该方法仅返回false(并过滤掉数组项)。如果不存在,或者存在且true,则该条目将在过滤结果中。

答案 1 :(得分:1)

您的isSome属性类型为字符串。从真相中删除双重浮雕。

{“ somevalues”:{},         “更多细节”: {           “ isSome”:是         }       }