我们如何编写nodes.filter((函数来保护给定的条件?
nodes: [1]
hiddenIds: undefined << This can be dynamically changed.
output => [1]
nodes: [1, 2]
hiddenIds: [2]
output => [1]
nodes: [1, 2]
hiddenIds: undefined
output => [1, 2]
nodes: [1, 2, 3]
hiddenIds: [2]
output => [1,3]
这是我的解决方案,它很有效;有人能优化这个查询吗?
nodes.filter(id => !hiddenIds || (hiddenIds && !hiddenIds.includes(id)))
感谢
如果未满足!hiddenIds
,并且控制流到达||
的右侧,则您将知道hiddenIds
是真实的,因此无需再次检查:
nodes.filter(id => !hiddenIds || hiddenIds.includes(id))
const nodes = [1, 2];
let hiddenIds = [1];
console.log(
nodes.filter(id => !hiddenIds || hiddenIds.includes(id))
);
hiddenIds = undefined;
console.log(
nodes.filter(id => !hiddenIds || hiddenIds.includes(id))
);
但如果hiddenIds
是真的,我宁愿首先只做过滤:
const results = hiddenIds
? nodes.filter(id => hiddenIds.includes(id))
: nodes; // or nodes.slice(), if you need a copy
const nodes = [1, 2];
let hiddenIds = [1];
console.log(
hiddenIds
? nodes.filter(id => hiddenIds.includes(id))
: nodes
);
hiddenIds = undefined;
console.log(
hiddenIds
? nodes.filter(id => hiddenIds.includes(id))
: nodes
);