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)该如何处理呢?谢谢啦~
(高手们,共同探讨学习,一起进步!)
展开
 我来答
百度网友84c11da
推荐于2017-10-13 · TA获得超过1108个赞
知道小有建树答主
回答量:695
采纳率:100%
帮助的人:403万
展开全部

你的写法,包含了默认的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]
wuxd7
2014-06-24 · TA获得超过323个赞
知道小有建树答主
回答量:452
采纳率:100%
帮助的人:286万
展开全部
如果需要非数字key,用对象tmp1={};
在添加数组的时候一般用push,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式