Object对象存储数据和Array对象存储数据有什么区别
我发现当我这样定义一个Array存放一组类别数据的时候,它的length和它的最大key的值相等。
var rows = new Array;
rows[129] = new Array(129,7,'建筑' );
rows[108] = new Array(108,13,'通信工程' );
那么rows虽然只放了两条数据,rows.length却等于129.
问题1:这是否说明了rows的存储空间会增大,占用内存会增多?
如果用Object来存储那么是
var rows2 = new Object;
rows2={
'129' : {'id':'129', 'pid':'7', 'title':'建筑' },
'108' : {'id':'108', 'pid':'13', 'title':'通信工程' }
}
这样存储,就可以直接用key来取自己要的数据了。可是rows2.length为空。
这样用对象存储比如几千条数据,运行起来是否会比用Array来存储几千条数据要慢。
是否比用数组存储的开销大?IE解释一个类似于上面的对象的时候是否会花费更多的时间?
问题点数:100、回复次数:11Top
1 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 14:19:51 得分 0
我用这个数据结构来实现我的树形联动,树形菜单,以及其他树形的东西。Top
2 楼liuxiaoyi666(MSMVP 小猪妹荣誉马甲之八卦兔子)回复于 2006-03-21 14:39:27 得分 5
C语言中struct和array的区别Top
3 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-03-21 14:53:38 得分 25
构造函数不同,假如通过prototype为Array扩充一个方法后,object就不能用
<script language=javascript>
var rows = new Array;
rows[129] = new Array(129,7,'建筑' );
rows[108] = new Array(108,13,'通信工程' );
alert(rows.constructor)
var rows2 = new Object;
rows2={
'129' : {'id':'129', 'pid':'7', 'title':'建筑' },
'108' : {'id':'108', 'pid':'13', 'title':'通信工程' }
}
alert(rows.constructor)
</script>Top
4 楼shenjf2000(一路走来)回复于 2006-03-21 15:00:29 得分 5
在Javascript中array的length和object的length并不同于其他语言中的array的length。我觉得楼主使用数组case应该不会导致性能的问题,在Javascript中array实际也是一种object,只不过有一些特别的方法。Top
5 楼KimSoft(革命的小酒天天醉-http://blog.csdn.net/kimsoft/)回复于 2006-03-21 15:02:19 得分 5
不会,详细请参考javascript权威指南数组的章节。Top
6 楼shenjf2000(一路走来)回复于 2006-03-21 15:06:30 得分 5
补充一下由于Javascript中的array是不连续的,因此我觉得上面使用数组的方法不会导致性能的问题。Top
7 楼DeluxWorld(曾经的你)回复于 2006-03-21 15:30:44 得分 5
数组本身也是一种对象,只是多了length属性。
lz的问题应该与数组的长度没有关系,因为数组是动态的
rows[107]没有分配到内存空间
用对象存储的话,实际上使用的也是数组的模式(key--value),
如果从应用的角度看,用对象存储要好一些~Top
8 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 16:01:48 得分 0
我总是怀疑用Object存储会带来额外的内存开销,虽然我测试了速度和用Array的基本相当。
可是那个array.length方法为什么按我的最大key返回长度?
所以我又怀疑这样用Array会带来内存的无用开销。
迷惑中。Top
9 楼xuzuning(唠叨)回复于 2006-03-21 16:41:10 得分 50
array.length返回最大可用下标。通常数组的下标是连续的,所以把他视为数组的规模。
看一下这个测试,你就应该没有什么担忧了
<script>
var rows = new Array;
rows[129] = new Array(129,7,'建筑' );
rows[108] = new Array(108,13,'通信工程' );
rows['gu1dai'] = 'abcd'; //注意这里并没有改变rows.length的值
document.write('rows.length:'+rows.length+'<br>');
i = 0;
for(v in rows) {
document.write('['+i+']'+v+'=>'+rows[v]+'<br>');
i++;
}
</script>Top
10 楼gu1dai(异域苍穹.百年飞行)回复于 2006-03-21 18:22:25 得分 0
关于array.length返回错误的结果我明白了。
还有一个疑问
不知道用Object存储数据会不会带来额外的内存开销。用Object存储数据可以使用key,好处很多。
就是不知道每行一个
{'id':'129', 'pid':'7', 'title':'建筑' }
这会不会多占内存。Top
11 楼mingxuan3000(铭轩)回复于 2006-03-21 20:02:50 得分 0
学习Top




