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]);

しかし、私は2つの質問があります:

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);

特定のタイムスタンプ/名前のペアのすべてのカウントを一度に取得する場合は、最後の2つのステートメントを1つに組み合わせることができます。

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 に答える