2012-04-28 123 views
0

我正在寻找创建一个简单的数组使用索引的时间戳,以便我可以通过时间戳访问值而无需遍历数组,但是我挣扎着!Javascript - 创建数组索引和访问

我需要能够为每一行设置2个值。

例如:

var myarray = []; 
var test1 = 'hello' 
var test2 = 'world' 

myarray[timestamp] = [test1, test2]; 

因此,对于一个给定的时间戳记例如12345678,我怎样才能访问test2的值?

感谢您的任何想法和建议。

问候,本。

回答

7

如果使用数组的方式,你最终用含有大量undefined值的数组:

var myarr = []; 
myarr[1000] = 'hello'; 
console.log(myarr.length); //=> 1001 
console.log(myarr[0]); //=> undefined 
console.log(myarr[999]); //=> undefined 

所以,你可能需要使用的对象为,并使用某种排序。例如

var myobj = {}, timestamp = new Date().getTime(); 
myobj[timestamp] = ['hello','world']; 
myobj[timestamp+1] = 'how are we today?'; 

function retrieveSorted(obj){ 
    var keys = Object.keys(obj).sort(), key, ret = []; 
    while(key = keys.shift()){ 
    ret.push(obj[key]); 
    } 
    return ret; 
} 

var sorted = retrieveSorted(myobj); 
    //=> [["hello", "world"], "how are we today?"] 
myobj[timestamp][1]; //=> world 
+1

很好的解释了JavaScript数组初始化问题,并证明了一个很好的选择。 – 2012-04-28 12:59:39

+0

我很肯定今天使用的大多数JS引擎都可以处理稀疏数组,所以不会有太大的区别。 – 2012-04-28 14:43:21

+0

@KooiInc这太棒了!我的确遇到了初始化问题,因此我为此苦苦挣扎。感谢您的优秀建议。 问候,本。 – Ben 2012-04-28 16:51:23

2
myarray[timestamp][1] 

1是在内部阵列的第二索引。索引从0开始。

+0

根据我的经验,在yourArray [i] [prop]中,我是可以访问对象属性值的计数器。干杯! – KevinIsNowOnline 2013-06-20 12:47:49