Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列与交换机的优势_Javascript_Arrays_Switch Statement - Fatal编程技术网

Javascript 阵列与交换机的优势

Javascript 阵列与交换机的优势,javascript,arrays,switch-statement,Javascript,Arrays,Switch Statement,这是一个稍微类似于的问题,但不同。比较 function Function1 (n) { switch (n) { case 0: return "apple"; break; case 1: return "pear"; break; // and a few more, or many more } } 及 然后根据需要调用或引用。第二种更整洁,但它是否有任何重要的缺点,不仅在速度方面,而且在内存使用方面?如果数组中有

这是一个稍微类似于的问题,但不同。比较

function Function1 (n) {
  switch (n) {
    case 0:
      return "apple";
    break;
    case 1:
      return "pear";
    break;
    // and a few more, or many more
  }
}


然后根据需要调用或引用。第二种更整洁,但它是否有任何重要的缺点,不仅在速度方面,而且在内存使用方面?如果数组中有更多事例/元素,答案会有很大变化吗?您的答案是Javascript特定的还是编程的一般原则?谢谢。

作为编程的一般原则,我将回答:

1数组将其整个作用域的所有字符串存储在内存中,或者使用手动分配内存的C/C++等语言,直到显式释放内存。对于大型阵列,这可能会占用大量内存

2与for switch不同,for switch在固定时间内添加对象,在数组的开头或中间添加或删除对象需要将所有后续元素重新复制到新位置。如果数组需要增长,则可能需要重新复制所有对象,因为作为数据结构的数组具有固定数量的元素,如果没有剩余空间,则增长数组将需要声明和重新初始化新数组的元素


3对于查找,switch在线性时间内发生,而数组查找在更快的恒定时间内发生。

不久前,我创建了这个jsperf来比较switch和其他方法。chrome中的开关速度非常慢:


数组查找与对象查找相同,在大多数实现中,对象查找是通过哈希表完成的,因此即使使用大型结构也非常快速。这与switch不同,switch实际上与一系列ifsIf相同。如果您需要访问索引上的数据,请使用结构访问索引上的数据。为什么要跳过多个条件,或者让编译器优化查找并混淆代码?谢谢。没有理由,除非不知道它是否有任何隐藏的优势我不知道交换机在内存使用方面是否优于阵列。代码也会占用空间。开关案例中引用的字符串也必须存储。这一点很好。不过,数组将字符串存储在内存中的连续位置,如果数组较大,则可能会出现问题。另一方面,开关盒的存储取决于编译器。如果您的数据变得那么大,您最好还是将其放入数据库中。
var Array2 = ["apple", "pear"]; // and more