0

I was trying to use a if...else statement with arrays without having to declare the arrays. I got it to work this way:

if(['banana','apple','lemon'].indexOf(somevar) >-1)
{
 //code
}
else if(['chicken','dog','elephant'].indexOf(somevar) >-1)
{
 //code
}
.
.
.

And it keep going this way until some dozens of if...elses. The code is working fine, no problem noticed. Is it a bad pratice? Is it really an array? Can it cause some performance loss, memory leaks, or reference problems? Does the "not declared" array used in this code, if it is really an array, have a proper name in programming?

4

5 回答 5

0

是的,['banana','apple','lemon']是一个数组,但是当somevar === 'chicken'因为['banana','apple','lemon'].indexOf(somevar) === 0这是一个错误值时,您的代码将失败。

另外,您的else if陈述是多余的。您应该通过以下方式检查索引:

if(['banana','apple','lemon'].indexOf(somevar) >= 0 ) { ... }
于 2013-09-20T14:55:32.333 回答
0

怎么样

switch(somevar) {
    case 'banana': case 'apple': case 'lemon'
        //...
        break;
    case 'chicken': case 'dog': case 'elephant'
        //...
        break;
}
于 2013-09-20T14:54:25.107 回答
0

在我看来,这似乎毫无意义,因为确切地知道你想要什么元素。

至于内存,数组应该在你移到下一条语句后立即被释放,在这种情况下我个人会考虑这种不好的做法,因为就像我之前所说的那样,它没有任何事情,因为你知道哪个会是选择。

如果它是用户要从中选择元素的静态列表,那没关系,但我可能会在其他地方定义数组并在需要时引用它,因此您不必一遍又一遍地创建完全相同的数组.

认为这是不好的做法,因为如果我想添加/删除/更改数组中的元素,我宁愿只在数组顶部声明时更改数组,或者更改数据源。通过将其洒在您的代码中,您允许难以维护代码的可能性。

于 2013-09-20T14:54:41.753 回答
0

您只是在动态声明/使用数组。它没有什么问题,它只是众多编码风格中的一种。例如

if (somevar == 'banana') || (somevar == 'apple') || etc...) {
  ...code...
} else if (somevar == 'chicken') || (somevar == 'dog') || etc...) {
  ... code
}

也许

switch(somevar) {
    case 'banana':// fall-through
    case 'apple': // fall-through
    case ...
         .... code ...
         break;
    case 'chicken':
    case 'dog': 
       etc...
}

它们都是有效的。这取决于您项目的代码风格指南是什么,以及您需要进行多少次比较。

于 2013-09-20T14:55:10.043 回答
0

我认为没有问题,但为了便于阅读和维护,我会声明这些数组:

var fruits = ['banana','apple','lemon'], 
    animals = ['chicken','dog','elephant'];
if(fruits.indexOf(somevar) > -1)
{
 //code
}
else if(animals.indexOf(somevar) > -1)
{
 //code
}

现在更清楚为什么要检查是否someVar在一个数组中,并且更新数组更容易 - 我想添加另一种动物,我转到动物数组,而不是“第一个 else if 块”。

于 2013-09-20T15:01:40.563 回答