我正在创建一个Web应用程序,其中用户从PHP获取数据,并且数据由MySQL行组成,因此我想将已使用的数据保存在全局变量中,类似于缓冲区,以防止额外的AJAX请求。
我现在正在这样做:
window.ray = []; // global variable
$(function(){
data = getDataWithAjax(idToSearch);
window.ray[data.id] = data.text;
});
但是当id很大时,现在说10,window.ray
就变成了这个:
,,,,,,,,42
所以它包含9个不必要的点。或者是吗?它只在我正在console.log(window.ray);
如果效率低下,我想找到像PHP这样的方法,我只能指定我想要的索引,例如:
$array['420'] = "abc";
$array['999'] = "xyz";
我目前的方式是否与PHP一样有效,或者它实际上是否包含不必要的内存点?
感谢您的帮助!
答案 0 :(得分:5)
使用对象而不是数组。该对象将允许您使用id作为键,并且对于非顺序id值更有效。
window.ray = {}; // global variable
$(function(){
data = getDataWithAjax(idToSearch);
window.ray[data.id] = data.text;
});
然后,您可以通过ID访问任何元素:
var text = window.ray[myId];
答案 1 :(得分:0)
如果直接按属性名称分配值,则无论使用数组还是对象,它在性能方面都没有任何区别。数组的属性名称是字符串,就像对象一样。
以下内容:
var a = [];
a[1000] = 'foo';
然后a
是(引用)一个长度为1,001的数组(总是至少比最高索引大一个),但它只有一个数字成员,一个名为'1000'
,有其他1,000个空成员,例如:
a.hasOwnProperty['999']; // false
数组只是具有特殊的自调整长度属性的对象,而且一些通用的方法可以应用于任何合适的对象。
稀疏数组的一个特性(即 0 到 length 的数字属性不连续)是for循环将遍历每个值,包括缺少的。通过使用for..in循环和使用hasOwnProperty测试,就像对象一样,可以避免这种情况并显着提高性能。
但是如果你不打算使用数组的任何特殊功能,你也可以按照jfriend00的建议使用一个对象。