我正在尝试根据标志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,是否有一种方法可以在不传递该标志的情况下进行过滤?
答案 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”:是 } }