how*_*his 5 javascript arrays performance
我一直在阅读,他们说联想数组不会给你与数组相同的效率.关联数组可以在O(N)时间内查找,其中数组可以在O(1)中查找.
这是我的问题:哪一个在快速查找值而不占用太多内存方面会更有效率?
联想:
var myVars=new Array();
myVars['test1'] = a;
myVars['test2'] = b;
myVars['test3'] = c;
... (up to 200+ values)
echo myVars['test2'];
Run Code Online (Sandbox Code Playgroud)
存储关联:
var myVars=new Array();
var TEST1 = 1;
var TEST2 = 2;
var TEST3 = 3;
... (up to 200+ values)
myVars[TEST1] = a;
myVars[TEST2] = b;
myVars[TEST3] = c;
... (up to 200+ values)
echo myVars[TEST2];
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 11
首先,第一次使用Array是错误的.尽管可以这样做,但这并不意味着你应该这样做.你正在"滥用"数组也是对象的事实.这可能会导致意外的行为,例如,虽然你加200个值,myVars.length会0.
不要将JavaScript数组用作关联数组.使用普通对象:
var myVars = {};
myVars['test1'] = a;
myVars['test2'] = b;
myVars['test3'] = c;
Run Code Online (Sandbox Code Playgroud)
其次,在JavaScript中,两者(对象和数组)之间没有真正的区别.数组扩展对象并添加一些行为,但它们仍然是对象.元素存储为数组的属性.
您可以在规范中找到更多信息:
数组对象对特定类的属性名称进行特殊处理.当且仅当ToString(ToUint32(P))等于P且ToUint32(P)不等于2 32 -1时,属性名P(以String值的形式)是数组索引.(......)
所以两者:
var obj = {'answer': 42};
obj['answer'];
Run Code Online (Sandbox Code Playgroud)
和
var arr = [42];
arr[0];
Run Code Online (Sandbox Code Playgroud)
具有相同的访问时间†,这绝对不是 O(n).
†:最好说应该有.显然,这在不同的实现中有所不同.
除此之外,你的第二个例子很难维护.如果为变量分配数字,为什么不直接使用数字?
var myVars = [];
myVars[0] = a;
myVars[1] = b;
myVars[2] = c;
Run Code Online (Sandbox Code Playgroud)
更新:
更重要的是:您必须根据需要选择正确的数据结构,这不仅取决于单个元素的访问时间,还取决于:
数值数组(数组)和关联数组(或哈希表/地图(JS中的对象))为不同的问题提供不同的解决方案.
| 归档时间: |
|
| 查看次数: |
17476 次 |
| 最近记录: |