Javascript数组占用内存及检索问题
先看个小例子vartmp1=newArray();vartmp2=newArray();tmp2["id"]=333;tmp2["name"]="zhangSam";tm...
先看个小例子
var tmp1 = new Array();
var tmp2 = new Array();
tmp2["id"]=333;
tmp2["name"]="zhangSam";
tmp1["8"] = tmp2//注释
tmp1["5"] = tmp2//注释
tmp1["1"] = tmp2//注释
console.log(tmp1);//[undefined, +[], undefined, undefined,。。。。。。。。
console.log(tmp1.length);//9
测试发现,只要//注释处key为数字,不管是否加引号(""),都会让数组非紧挨排列
数组长度为最大数值长度加1,如上长度为9,但我明明就3组数据
如果把8\5\1换为a\b\c,那么得到的长度为0,但却是紧挨排列的
想要的效果是: 8\5\1或换为夸张点的说 23\44\2000
得到数组总长度为3(既不影响空间又不影响检索速度)
我会这样去取值tmp1[2000]或tmp1["2000"]
(若以目前情况来看可能会输出很多的undefined,虽说也可能不占空间,但我总是担心)
(数组内可能有200个元素,最大值可能到1W)该如何处理呢?谢谢啦~
(高手们,共同探讨学习,一起进步!) 展开
var tmp1 = new Array();
var tmp2 = new Array();
tmp2["id"]=333;
tmp2["name"]="zhangSam";
tmp1["8"] = tmp2//注释
tmp1["5"] = tmp2//注释
tmp1["1"] = tmp2//注释
console.log(tmp1);//[undefined, +[], undefined, undefined,。。。。。。。。
console.log(tmp1.length);//9
测试发现,只要//注释处key为数字,不管是否加引号(""),都会让数组非紧挨排列
数组长度为最大数值长度加1,如上长度为9,但我明明就3组数据
如果把8\5\1换为a\b\c,那么得到的长度为0,但却是紧挨排列的
想要的效果是: 8\5\1或换为夸张点的说 23\44\2000
得到数组总长度为3(既不影响空间又不影响检索速度)
我会这样去取值tmp1[2000]或tmp1["2000"]
(若以目前情况来看可能会输出很多的undefined,虽说也可能不占空间,但我总是担心)
(数组内可能有200个元素,最大值可能到1W)该如何处理呢?谢谢啦~
(高手们,共同探讨学习,一起进步!) 展开
2个回答
展开全部
你的写法,包含了默认的js对象 的转换。
你这样写
tmp1["8"] = tmp2//注释
tmp1["5"] = tmp2//注释
tmp1["1"] = tmp2//注释
实际上 js会把 字符“8”转成数字,也就是声明了如下数组:
var temp1 = [undedined,tmp2,undedined,undedined,undedined,tmp2,undedined,undedined,tmp2]
明显这个时候长度是 9
当你写成
tmp1["a"] = tmp2//注释
tmp1["b"] = tmp2//注释
tmp1["c"] = tmp2//注释
时,实际上temp已经不是一个Array对象了。是一个JSON对象即
{
"a":temp2,
"b": temp2,
"c":temp2
}
这个json对象的length为0 (默认的属性)
因此你想不占用长度赋值,应该使用第二种情况。
即赋值时,给数组加个前缀或其他字母,组合成json对象。如:
temp1["_"+10000] = temp2
temp1["_"+20000] = temp2
那么获取的时候采用
temp["_"+10000]
此种即可。主要理解json和array 对元素的赋值和取值 方法就明白了
更多追问追答
追问
原来如此,再问一下,怎么删掉这个temp["_"+10000]元素的,快回来啊,我也在试,你若先解决,加20分
追答
delete temp["_"+10000]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询