在JavaScript中优化求反OR和运算符查询(Filter方法)



我们如何编写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
);