JavaScript - 在对象中创建数组

时间:2012-04-29 13:59:20

标签: javascript arrays object

我希望存储以下数据结构:

TIMESTAMP | NAME | COUNTS

对于每个时间戳,可以有多个名称,每个名称都有一个计数列表:

123456 | EXAMPLE1 | 1,2,3,4
       | EXAMPLE2 | 4,3,2,1
       | EXAMPLE3 | 9,7,4,3

我想将时间戳存储为对象索引,以便在知道时间戳时可以访问它。这也消除了数组大小限制和定义等问题。

我不知道如何为每个时间戳创建一个“名称”列表,并且我希望存储一个计数列表。

任何人都可以建议我如何创建此数据结构并访问特定时间戳和名称的所有计数?

到目前为止,我有这个:

dataObj[timestamp] = new Array(name,[count]);

但我有两个问题:

1)我如何测试我是否已经拥有该名称?

2)我如何添加其他名称数组?

感谢任何评论。

问候,本。

4 个答案:

答案 0 :(得分:2)

给定时间戳,名称和计数:

// if we haven't seen this timestamp, create a new object for it
dataObj[timestamp] = dataObj[timestamp] || {}; 

// if we haven't seen this name yet in this time stamp, create a new array for it
dataObj[timestamp][name] = dataObj[timestamp][name] || []; 

// add this count to the array
dataObj[timestamp][name].push(count);

如果您同时获得给定时间戳/名称对的所有计数,您可以将最后两个语句合并为一个:

dataObj[timestamp][name] = countsArray;

答案 1 :(得分:1)

您可以在对象中嵌套对象。所以你的dataObj看起来像

var dataObj = {}, 
    currentTime = new Date().getTime();

dataObj[currentTime].example1 = [1,2,3,4];               //<== question 2

// later ...
if (dataObj[currentTime] && !dataObj[newTime].example2){ //<== question 1
  dataObj[currentTime].example2 = [4,3,2,1];             //<== question 2 
}

/* 
  lets say currentTime was 1335709735241. After the previous 
  code dataObj contains:
   dataObj['1335709735241'].example1 => [1,2,3,4]
   dataObj['1335709735241'].example2 -> [4,3,2,1]
*/

检查某个Object中是否存在属性的另一种方法:

if ('someproperty' in someObj) { /* etc. */}

答案 2 :(得分:0)

有一些我不知道的细节,例如,你是否检查名称是否存在,以便在名称存在时,

  1. 您是否向现有阵列添加新计数?
  2. 用新数组替换当前数组?
  3. 忽略新信息?
  4. 以下代码执行2.替换。试一试http://jsfiddle.net/DrPw6/1/

      var data = {};
      setNameArray('12345', 'example1', [1,2,3]);
      setNameArray(33, 'example2', [4,5,6]);
    
      function setNameArray(timestamp, name, array) {
        if (!(timestamp in data)) {
          data[timestamp] = {};
        }
        data[timestamp][name] = array;
      }
    
      function nameExists(timestamp, name) {
        return (name in data[timestamp]);
      }
      // to read
      document.write(data['12345'].example1 + "<br>");
      document.write(data['12345']['example1'] + "<br>");
      document.write(JSON.stringify(data));
    

    请注意data.12345.example1无效,因为密钥是数字。

答案 3 :(得分:0)

var timeStamp = new Object();

  function propCreator(obj, k, arr) {
    if (!obj.hasOwnProperty(k)) {
          obj[k] = arr;
      }
          else {
             alert("sry. object have property " + k);
          }
    }

// create new name and array         
var arr = [3,4,5,6];
var name = "theName";
// then you can add new new property and its value to the object:
propCreator(timeStamp, name, arr);
alert(JSON.stringify(timeStamp))