【问题标题】:Javascript - create array index and accessJavascript - 创建数组索引和访问
【发布时间】:2012-04-28 11:54:09
【问题描述】:

我希望使用索引的时间戳创建一个简单的数组,这样我就可以通过时间戳访问值而无需遍历数组,但是我很挣扎!

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

例如:

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

myarray[timestamp] = [test1, test2];

所以对于给定的时间戳,例如12345678,如何获取test2的值?

感谢任何想法和建议。

问候,本。

【问题讨论】:

    标签: javascript arrays indexing


    【解决方案1】:

    如果你以这种方式使用数组,你最终会得到一个包含大量 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
    

    【讨论】:

    • 很好地解释了 JavaScript 数组初始化问题,并证明了一个不错的选择。
    • 我很确定现在使用的大多数 JS 引擎都可以很好地处理稀疏数组,所以不会有太大区别。
    • @KooiInc 这太棒了!我确实遇到了初始化问题,因此我为什么在挣扎。感谢您的出色建议。问候,本。
    • @Oleg:最大数组长度为 4294967295。如果使用时间戳索引(可能远大于该最大值),则该数组的 length 实际上将为 0,而 Array 方法渲染或多或少不可用(不会抛出错误,但不会返回值或不做你期望他们做的事情)。
    【解决方案2】:
    myarray[timestamp][1]
    

    1 是内部数组中的第二个索引。索引从 0 开始。

    【讨论】:

    • 根据我的经验,在 yourArray[i][prop] 中,i 是允许您访问对象属性值的计数器。干杯!
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2013-09-27
    • 2023-03-12
    相关资源
    最近更新 更多