Javascript 如何根据条件向数组中添加项

Javascript 如何根据条件向数组中添加项,javascript,arrays,reactjs,object,ecmascript-6,Javascript,Arrays,Reactjs,Object,Ecmascript 6,是否有更干净、更有效的方法来实现这一点,而不是执行嵌套条件: 如果选项===3,则将nearbyLocations和recentSearches对象添加到数组中 如果option==1,则仅添加最近的搜索 否则(或选项===2),仅添加nearbyLocations对象 请参阅下面的代码。谢谢大家! const results = option === 3 ? [...state.nearbyLocations, ...recentSearches] : option === 1 ? [..

是否有更干净、更有效的方法来实现这一点,而不是执行嵌套条件:

  • 如果选项===3,则将nearbyLocations和recentSearches对象添加到数组中
  • 如果option==1,则仅添加最近的搜索
  • 否则(或选项===2),仅添加nearbyLocations对象
请参阅下面的代码。谢谢大家!

const results = option === 3 ? [...state.nearbyLocations, ...recentSearches] : option === 1 ? [...recentSearches] : [...state.nearbyLocations]

您可以使用多个排列元素,这些元素根据选项是否为结果贡献值而定:

const results = [
    ...(option === 3 || option === 2 ? state.nearbyLocations : []),
    ...(option === 3 || option === 1 ? recentSearches : []),
];
或者使用位掩码,因为这是您的选项基本匹配的内容

const results = [
    ...(option & 0b10 ? state.nearbyLocations : []),
    ...(option & 0b01 ? recentSearches : []),
];

在这种情况下,最好使用以下语句:

var results = [];
switch (option) {
    case 3:
        results.push(...state.nearbyLocations, ...recentSearches);
        break;
    case 1:
        results.push(...recentSearches);
        break;
    case 2:
        results.push(...state.nearbyLocations);
        break;
}

option
真的是一个字符串吗?它只能有这三个值吗?0是否也是一个有效值?如果不需要嵌套条件,您可能需要查看它。我更新了上面的代码,使该选项为整数。有一个0或默认值,我希望在其中返回空数组[]我从不使用嵌套条件。使用if语句的开关来保留readability@Mike好的,我的答案只是:-)你的问题中的代码没有正确地考虑<代码> 0代码/Case>。为什么要将扩展运算符添加到…选项中?扩展运算符用于…状态。nearbyLocations@Mike扩展语法包含整个三元表达式。我将使用括号来更清楚地说明这一点,但它们不是必需的。啊,很好-这非常有效。比我原来的干净多了。非常感谢。www.Awwww。确切地说是我的建议。当答案不清楚时,问不同的问题(当我添加…,是什么情况)。请不要使用位图-糟糕的做法。。。除非是代码高尔夫:)@Tymek为什么你认为位图是一种糟糕的做法?因为很少有人理解按位运算?在我看来,它们非常适合这一点,甚至可能是
选项的设计方式——根据OP,对于
0
的值,不应返回任何内容,对于
1
一个,对于
2
另一个,对于
3
二者都不应返回。不难发现模式:-)您的意思是对方法调用使用扩展语法吗?您不应该需要
apply
,也不应该需要数组文本。@Bergi很抱歉,这就是我认为OP希望将其推送到数组的原因。我应该如何最好地做到这一点?如果您觉得有必要,请随意用正确的语法编辑我的答案。好的,完成了,现在它应该与OP所做的相同:-)