2

我正在寻找存储以下数据结构:

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

4 回答 4

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;
于 2012-04-29T14:12:07.607 回答
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]
*/

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

if ('someproperty' in someObj) { /* etc. */}
于 2012-04-29T14:21:10.010 回答
0

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

  1. 您向现有数组添加新计数?
  2. 用新数组替换当前数组?
  3. 忽略新信息?

下面的代码执行 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不起作用,因为键是数字。

于 2012-04-29T14:33:30.853 回答
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))
于 2012-04-29T14:49:53.043 回答